试图在文本框中只替换一个字符串实例

时间:2012-12-26 20:00:52

标签: .net vb.net string winforms visual-studio-2010

在我的应用程序中,我使用名为Fastcoloredtextbox的文本框控件,虽然它继承了文本框控件,但它应该是相同的解决方案。

我添加了用户点击我的应用程序中的单词的功能,然后打开一个打开的文件对话框,然后用户可以选择一个文件并替换用文件名单击的单词。这是我想要完成的,除了一个问题...它用文件名替换文本框中同一个单词的每个实例。我不确定如何只更换被点击的单词。任何帮助将不胜感激。

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

1 个答案:

答案 0 :(得分: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只是我的猜测,您必须检查实际代表的范围的文档以获取正确的属性名称。