我想在用户点击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
好的将会看到,未来的时间,什么时候会
答案 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(如选择)。