0

ユーザーが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

わかりました、それはいつですか、将来の時間はいつですか

4

3 に答える 3

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
于 2012-05-11T13:51:45.037 に答える
-1

user934820 が提案したコードは改善できると思います。単語の境界は、"\b" を使用するとよりよく検索されます。おまけとして、テキストの終わりのケースは無視できます (これは単語の境界でもあるため)。したがって、コードは次のようになります

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 ずつ増やします (選択など)。

于 2016-01-04T15:28:37.780 に答える
-1

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

于 2013-10-04T12:34:08.580 に答える