निम्न कोड का उद्देश्य ReadOnly
RichTextBox में टेक्स्ट बफर को बनाए रखने का लक्ष्य है, जिसमें अधिकतम वर्णित वर्ण हैं, और हमेशा नीचे स्क्रॉल किए जाते हैं। यह एक रीयलटाइम लॉग स्ट्रीम करता है।मैं केवल पढ़ने के लिए RichTextBox से प्रोग्राम को हटा सकता हूं?
लेकिन अधिकतम वर्ण संख्या बनाए रखने के लिए मेरे प्रयास में, rtMessages.TextLength()
rtMessages.SelectedText = String.Empty
और इसके परिणामस्वरूप के बाद से बदल रहा है, बचाव की मुद्रा में If
ब्लॉक के बिना, मैं बार-बार बफर की पहली पंक्ति को हटाने का प्रयास अनंत लूप को रखना होगा ।
जब मैं ReadOnly
-RichTextBox
कीता को हटा देता हूं, तो यह कार्यक्षमता सफल होती है। AppendText
सफल होने के बाद से थोड़ा अजीब लगता है, लेकिन मैं समझता हूं कि चयन एक अलग जानवर है।
मैं इसे बना सकते हैं तो एक ReadOnly
RichTextBox
प्रोग्राम के रूप में परिवर्तनीय है कि?
Private Sub onNewData(ByRef data As String) Handles _server.clientSentData
' Add new text
rtMessages.SelectionStart = rtMessages.TextLength()
rtMessages.AppendText(data)
' Delete oldest text line-by-line until the whole buffer is shorter than MAX_TEXT_LENGTH characters
Const MAX_TEXT_LENGTH = 200
Dim textLength = rtMessages.TextLength()
While textLength > MAX_TEXT_LENGTH
Dim i As Int16 = 0
Do While rtMessages.GetLineFromCharIndex(i) < 1
i += 1
Loop
rtMessages.Select()
rtMessages.SelectionStart = 0
rtMessages.SelectionLength = i
rtMessages.SelectedText = String.Empty
rtMessages.SelectionLength = 0
If rtMessages.TextLength() = textLength Then
rtMessages.Clear()
rtMessages.AppendText("[buffer trimming algorithm failed]")
Exit While
End If
textLength = rtMessages.TextLength()
End While
' Scroll down
rtMessages.SelectionStart = rtMessages.TextLength()
rtMessages.ScrollToCaret()
End Sub
मैं पुष्टि कर सकता हूं कि यह 'सब' यूआई थ्रेड पर लगाया जा रहा है, कुछ कॉमम्स थ्रेड नहीं। –
+1 क्योंकि समस्या उतनी आसान नहीं है जितनी दिखती है ... मैं अनुमान लगाता हूं कि किसी ने इसे पहले कभी नहीं बताया है। –