gpt4 book ai didi

vb.net - 自动滚动到由 backgroundworker 更新的多行文本框的底部

转载 作者:行者123 更新时间:2023-12-03 20:16:38 25 4
gpt4 key购买 nike

我有一个设置为执行任务的后台工作控件,并使用委托(delegate)过程更新我的主 UI 上的多行文本框。这一切都很完美,但是一旦更新从文本框的底部滚动出来,就会出现滚动条,但是持续刷新会导致文本框保持锁定在顶部。理想情况下,我希望文本框自动滚动到底部以实时显示最新条目。实现这一点的最佳方法是什么?

我试过使用 scrolltocaret()方法,有和没有 SelectionStart = txtlog.Text.Length前面的命令。也许我把它放在错误的地方?

下面的一些代码示例:

委托(delegate)代码:

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

主要后台 worker 事件:
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()是我想要的正确方法,但我把它放在哪里最好?我已经在委托(delegate)、主要后台工作人员以及 runworkerasync() 之前和之后进行了尝试。方法。这些都不起作用,现在我很难过!

最佳答案

试试这种方式:

'textbox.Text = text
textbox.AppendText(text)

您注释掉的代码没有在 GUI 线程上运行,正如 M Granja 指出的那样,AppendText 将自动滚动到框中的附加文本,因此无需调用 ScrollToCaret。

关于vb.net - 自动滚动到由 backgroundworker 更新的多行文本框的底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19728585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com