0

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

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 也能够选择和复制文本。任何人都知道如何正确选择反向文本或轻松解决我关于取消选择文本的问题?谢谢。

4

1 回答 1

1

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

于 2009-08-11T10:50:05.640 回答