2012-05-09 2 views
0

나는 contextmenustrip dorpdownitem을 클릭하는 동안 마우스 커서로 현재 단어를 바꾸려고합니다. 나는 단어를 얻을 수 있지만 여기에 새로운 단어로 대체 할 수 없다는 것은 내 코드이다. 어떤 도움도 크게 감사한다. 이richtextbox에서 마우스 밑의 단어 대체 vb.net

+0

그래서 '도움이 필요한 코드'가 무엇입니까? – Jared

+0

가지고있는 코드에 대해 어떻게 작동하지 않습니까? –

+0

'도움이 필요한 코드가 필요합니까? 예, 가지고있는 코드에 대해 어떻게 작동하지 않습니까? acctualy 대체 할 단어와 바꿀 단어가 모두 있지만 커서가 현재 어디에 있는지 어떻게 알 수없고 내 단어를 바꿀 수있는 방법은 무엇입니까? – user934820

답변

1

확인을 할 때

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 

확인은 미래의 시간을 볼 수 있습니다. 포럼에서 아래 코드를 찾아 내 필요에 따라 약간 이상하지만 작동하도록 변경했습니다. 마우스 이동 이벤트에서 는

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

F6.RichTextBox1.Focus() SendKeys.Send (TextBox4.Text를) 대체는

-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) 

바랍니다 모습이 검색 (원래의 코드와 같이) 단어 NOT 그 후 공간에 매우 마지막 문자를 반환 할 것이라고주의를 기울여야 할 것이다. 필요한 경우 (Selection과 같이) 1 씩 증가시킵니다.