【问题标题】:Reverse selecting text programmatically in a richtextbox (vb.net)在richtextbox(vb.net)中以编程方式反向选择文本
【发布时间】:2009-03-21 18:07:45
【问题描述】:

我有一个带有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

我的主要目标是即使在将新文本附加到富文本框时也能够选择和复制文本。任何人都知道如何正确选择反向文本或轻松解决我关于取消选择文本的问题?谢谢。

【问题讨论】:

    标签: .net vb.net scrollbar selection


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2010-11-30
      • 1970-01-01
      • 2012-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      相关资源
      最近更新 更多