द्वारा अपडेट किए जा रहे मल्टीलाइन टेक्स्टबॉक्स के नीचे स्वत: स्क्रॉल करें मेरे पास एक पृष्ठभूमि कार्यकर्ता नियंत्रण है जो कार्य करने के लिए सेट है, और एक प्रतिनिधि प्रक्रिया का उपयोग करके मेरे मुख्य UI पर एक बहुभाषी टेक्स्ट बॉक्स अपडेट करें। यह सब पूरी तरह से काम कर रहा है, हालांकि टेक्स्ट बॉक्स के निचले भाग को अपडेट करने के बाद, स्क्रॉल बार दिखाई देते हैं, लेकिन निरंतर ताज़ा करने से टेक्स्ट बॉक्स शीर्ष पर लॉक होने का कारण बनता है। आदर्श रूप में, मैं रीयल-टाइम में नवीनतम प्रविष्टि दिखाने के लिए टेक्स्ट बॉक्स को नीचे स्क्रॉल करना चाहता हूं। इसे लागू करने का सबसे अच्छा तरीका क्या होगा?पृष्ठभूमि कार्यकर्ता
मैंने scrolltocaret()
विधि का उपयोग करने की कोशिश की है, इसके बिना SelectionStart = txtlog.Text.Length
कमांड के साथ और बिना। शायद मैं इसे गलत जगह पर डाल रहा हूं?
कुछ नीचे दिए गए कोड नमूने:
प्रतिनिधि कोड:
Delegate Sub updateresults_delegate(ByVal textbox As TextBox, ByVal text As String)
Private Sub updatelog_threadsafe(ByVal textbox As TextBox, ByVal text As String)
If textbox.InvokeRequired Then
Dim mydelegate As New updateresults_delegate(AddressOf updatelog_threadsafe)
Me.Invoke(mydelegate, New Object() {textbox, text})
'Me.txtlog.SelectionStart = txtlog.Text.Length
'Me.txtlog.ScrollToCaret()
Else
textbox.Text = text
End If
End Sub
मुख्य BackgroundWorker गतिविधि:
For i As Integer = val1 To val2
'generate an IP address from split host parts and current value of i
host = s1(0) & "." & s1(1) & "." & s1(2) & "." & i
Try 'attempt to ping the IP
Dim reply As PingReply = pingsender.Send(host, timeoutval, buffer, options)
If reply.Status = IPStatus.Success Then
name = System.Net.Dns.GetHostEntry(host)'get DNS entry
resulttext += String.Format("{1} - {2}: reply: Bytes={3} time{4} TTL={5}{0}", vbCrLf, name.HostName, reply.Address.ToString, reply.Buffer.Length, getms(reply.RoundtripTime), reply.Options.Ttl) 'print out success text
Else
resulttext += String.Format(" {1}: Ping failed. {2}{0}", vbCrLf, host, reply.Status.ToString) 'print out fail text
End If
updatelog_threadsafe(txtlog, resulttext) 'send text to textbox
System.Threading.Thread.Sleep(1000)
Catch ex As Exception
End Try
Next
मुझे लगता है कि मेरी मुख्य सवाल यह है: मैं बहुत कुछ है कि textbox.scrolltocaret()
है कर रहा हूँ जो भी मैं चाहता हूं उसके लिए उपयोग करने के लिए सही तरीका है, लेकिन इसे रखने के लिए मेरे लिए सबसे अच्छी जगह कहां है? मैंने इसे runworkerasync()
विधि के बाद प्रतिनिधि, मुख्य पृष्ठभूमि कार्यकर्ता के साथ-साथ & से पहले भी कोशिश की है। इनमें से कोई भी काम नहीं किया, और अब मैं फंस गया हूँ!
प्रतिक्रिया के लिए धन्यवाद करने के लिए पॉप। मैंने इसे प्रतिनिधि में आईएफ कथन में जोड़ा है, और यह अब एक इलाज करता है! प्रारंभ में यह प्रति रोशनी एक दिलचस्प यौगिक संदेश (1 परिणाम, फिर 2 परिणाम, फिर 3 परिणाम, आदि) पैदा कर रहा था। यह + = मैं स्ट्रिंग पर टेक्स्टबॉक्स पर भेजा गया था क्योंकि यह हो गया था। यह अब तय है। धन्यवाद! – almg
बस [इस उत्तर] से एक नोट, (http://stackoverflow.com/a/14886915/613438): यदि आप TextBox.AppendText (स्ट्रिंग टेक्स्ट) का उपयोग करते हैं, तो यह स्वचालित रूप से नए संलग्न टेक्स्ट के अंत तक स्क्रॉल हो जाएगा। यदि आप इसे लूप में बुला रहे हैं तो यह झटकेदार स्क्रॉलबार से बचाता है। यह भी आगे की तुलना में तीव्रता का क्रम होता है। त्वरित संपत्ति। हालांकि यह इस बात पर निर्भर हो सकता है कि आप इसे कितनी बार कॉल कर रहे हैं; –