在richtextbox vb.net中替换鼠标下的单词

时间:2012-05-09 04:41:28

标签: vb.net mouse

我想在用户点击contextmenustrip dorpdownitem时替换鼠标光标下的当前单词。我可以得到这个词,但无法用新的替换这个词是我的代码,任何帮助都非常感激。

Private Sub tsmmutradifat__DropDownItemClicked(ByVal sender As Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles tsmmutradifat_.DropDownItemClicked
    Dim myclickeditem As String = correct_word(e.ClickedItem.Text)
    Dim wordtoreplace As String
    If Not myclickeditem = Nothing Then
        If RichTextBox1.SelectedText = "" Then
            ' Code required
        Else
            wordtoreplace = RichTextBox1.SelectedText
            If wordtoreplace.EndsWith(" ") Then
                myclickeditem = myclickeditem & " "
            End If
            If wordtoreplace.StartsWith(" ") Then
                myclickeditem = " " & myclickeditem
            End If
            RichTextBox1.SelectedText = myclickeditem
        End If
    End If
End Sub

好的将会看到,未来的时间,什么时候会

3 个答案:

答案 0 :(得分:1)

确定了。在论坛上找到以下代码并根据我的需要更改它有点奇怪但工作。 在鼠标移动事件中

Public cursorAt As Integer
    Public wordEnd As Integer
    Public isEnd As Boolean
    Public wordStart As Integer
cursorAt = RichTextBox1.GetCharIndexFromPosition(e.Location)
       If cursorAt = 0 Then Return
       wordEnd = New Regex("[\s$]{1}").Match(RichTextBox1.Text.Substring(cursorAt)).Index
       isEnd = Not New Regex("\s").IsMatch(RichTextBox1.Text.Substring(cursorAt))
       wordStart = New Regex("[\s^]{1}", RegexOptions.RightToLeft).Match(RichTextBox1.Text.Substring(0, cursorAt)).Index
       If isEnd Then
 RichTextBox1.Select(wordStart, RichTextBox1.Text.Length)
                  Else
          RichTextBox1.Select(wordStart, cursorAt - wordStart + wordEnd)

       End If

然后简单地替换然后单词

RichTextBox1.SelectedText = myclickeditem

答案 1 :(得分:-1)

F6.RichTextBox1.Focus()         SendKeys.Send(TextBox4.Text)

答案 2 :(得分:-1)

我认为user934820建议的代码可以改进。 使用" \ b"可以更好地寻找单词边界。作为奖励,我们可以忽略文本结束的情况(因为它也是单词border)。所以代码看起来像

wordEnd = New Regex(".\b{1}").Match(RichTextBox1.Text.Substring(cursorAt)).Index
wordStart = New Regex("\b.{1}", RegexOptions.RightToLeft).Match(RichTextBox1.Text.Substring(0, cursorAt)).Index

RichTextBox1.Select(wordStart, cursorAt - wordStart + wordEnd + 1)

请注意,此搜索将返回单词中的最后一个字母而不是后面的空格(如原始代码中所示)。因此,在需要的地方增加1(如选择)。