在richtextbox(vb.net)中以编程方式反向选择文本

时间:2009-03-21 18:07:46

标签: .net vb.net scrollbar selection

我有一个带有richtextbox和滚动条的表单。我希望能够继续将文本附加到文本框而不会丢失我的选择。在我附加文本并将其设置回来之前,我可以保存selectionstart和selectionlength。问题在于反向选择。我能做的最好的事情是将选择开始设置在正确的位置,但是我必须移动鼠标才能再次选择文本。我在附加文本之前和之后使用以下函数:

Private Sub StopRepaint()
Dim pt As Point
' Stop redrawing:
SendMessage(txtchat.Handle, WM_SETREDRAW, 0, pt)
' Stop sending of events:
eventmask = SendMessage(txtchat.Handle, EM_GETEVENTMASK, 0, pt)
End Sub

Private Sub StartRepaint()
Dim pt As Point
' turn on events
SendMessage(txtchat.Handle, EM_SETEVENTMASK, 0, pt)
' turn on redrawing
SendMessage(txtchat.Handle, WM_SETREDRAW, 1, pt)
' this forces a repaint, which for sotxtchat reason is necessary in sotxtchat cases.
txtchat.Invalidate()
End Sub

如果我的滚动条位置不在底部,我会在添加文本后使用此设置:

If Not isbottom(getpos) Then
    PostMessageA(txtchat.Handle, WM_VSCROLL, SB_THUMBPOSITION + _
                       &H10000 * getpos(), Nothing)
End If

我的主要目标是即使将新文本附加到richtextbox,也能够选择和复制文本。任何人都知道如何正确选择反向文本或轻松修复我的问题取消选择文本?感谢。

1 个答案:

答案 0 :(得分:1)

我会尝试制作“可选块”,使每个附加的文本板保持与下一个块无关。有点像MSN messenger。您可以使“面板”看起来无缝,使用stringbuilder可以将最终块作为单个流安全地导出。