عكس اختيار النص برمجيا في richtextbox (vb.net)
سؤال
ولدي نموذج مع 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. أي شخص يعرف كيفية اختيار صحيح النص في الاتجاه المعاكس OR بسهولة تحديد مشكلتي حول النص الذي إلغاء تحديد؟ شكرا.
المحلول
وأود أن محاولة جعل "لبنات اختيار" الحفاظ على كل لوح الملحقة مستقلة نص كتلة التالي. نوع من مثل MSN رسول. يمكنك جعل "لوحات" تظهر سلس، ويمكن أن تستخدم ب StringBuilder تصدير كتلة النهائي بأمان كما تيار واحد.