2

私のアプリケーションでは、Fastcoloredtextbox というテキスト ボックス コントロールを使用していますが、これはテキスト ボックス コントロールを継承しているため、これを行うには同じソリューションである必要があります。

ユーザーがアプリケーションで単語をクリックすると、ファイルを開くダイアログが開き、ユーザーがファイルを選択して、クリックされた単語をファイル名に置き換える機能を追加しました。これは、1 つの問題を除いて、私が達成しようとしているものです...テキスト ボックス内の同じ単語のすべてのインスタンスをこのファイル名に置き換えます。ただし、クリックされた単語のみを置き換える方法はわかりません。どんな助けでも大歓迎です。

Private Sub tb_VisualMarkerClick(sender As Object, e As VisualMarkerEventArgs)
Dim page As RadPageViewPage = RadPageView1.SelectedPage
Dim txt As FastColoredTextBox = TryCast(page.Controls(0), FastColoredTextBox)
Dim ofd As New OpenFileDialog
ofd.FileName = ""
ofd.Filter = "Image Files (*.bmp, *.jpg)|*.bmp;*.jpg"
If ofd.ShowDialog = DialogResult.OK 
    Then
        Dim ClickedWord As String = (TryCast(e.Marker, RangeMarker).range.Text)
        txt.Text = txt.Text.Replace(ClickedWord, ofd.FileName)
    End If
End Sub

clickedword 文字列は、クリックされた実際の単語です。

編集:アイテムがクリックされた場所で選択を開始し、単語全体を選択するソリューションを思いつきました。選択すると、テキストを挿入して、選択した単語を置き換えることができます。アドバイスをくださった方々、ありがとうございました。

    Private Sub tb_VisualMarkerClick(sender As Object, e As VisualMarkerEventArgs)
    Dim page As RadPageViewPage = RadPageView1.SelectedPage
    Dim txt As FastColoredTextBox = TryCast(page.Controls(0), FastColoredTextBox)
    txt.Invalidate()
    txt.Selection.Start = New Place((TryCast(e.Marker, RangeMarker).range).Start.iChar, (TryCast(e.Marker, RangeMarker).range).Start.iLine)
    txt.SelectionLength = (TryCast(e.Marker, RangeMarker).range).Text.Length
    Dim ClickedWord As String = (TryCast(e.Marker, RangeMarker).range.Text)
    If ClickedWord = "path" Then
        Dim ofd As New OpenFileDialog
        ofd.FileName = ""
        ofd.Filter = "Image Files (*.bmp, *.jpg)|*.bmp;*.jpg"
        If ofd.ShowDialog = DialogResult.OK Then

            txt.InsertText(ofd.FileName)

        End If
    End If
End Sub
4

1 に答える 1

1

テキスト自体だけでなく、テキストの実際の位置 (文字列内の位置) を取得するには、RangeMarker を使用する必要があります。

テキストの開始位置を取得したら、Substring を使用できます。何かのようなもの...

Dim ClickedWord As String = (TryCast(e.Marker, RangeMarker).range.Text)
Dim StartPosition As String = (TryCast(e.Marker, RangeMarker).range.Start)
txt.Text = txt.Text.Substring(0, StartPosition) + ofd.FileName + txt.Text.Substring(StartPosition + ClickedWord.Length)

.range.Start は、正しいプロパティ名を取得するために範囲が実際に表しているもののドキュメントを確認する必要がある私の推測にすぎません。

于 2012-12-26T20:16:59.343 に答える