Отменить выделение текста программно в richtextbox (vb.net) - PullRequest
0 голосов
/ 21 марта 2009

У меня есть форма с 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 Ответ

1 голос
/ 11 августа 2009

Я бы попробовал сделать «выбираемые блоки», чтобы каждая добавленная часть текста не зависела от следующего блока. Вроде как MSN Messenger. Вы можете сделать так, чтобы «панели» выглядели безупречно, а при помощи строителя строк можно безопасно экспортировать последний блок в виде единого потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...