我有两个多行文本框; txtInputList和txtComplete。我可以手动将一行从txtInputList移动到txtComplete,同时从txtInputList中删除该行作为所需的结果。但是,我很难对每一行自动执行此操作。下面是手动单击每一行的按钮的方法:
Private Sub btnProcessItems_Click(sender As Object, e As EventArgs) Handles btnProcessItems.Click
Dim strText() As String
strText = Split(txtInputList.Text, vbCrLf)
txtInputList.Text = String.Join(vbCrLf, strText, 1, strText.Length - 1)
txtComplete.AppendText(strText(0) + vbCrLf)
End Sub
我试过一个For循环,但是我不能让它工作。
Private Sub btnProcessItems_Click(sender As Object, e As EventArgs) Handles btnProcessItems.Click
Dim strText() As String
strText = Split(txtInputList.Text, vbCrLf)
For x As Integer = 0 to strText.Length
txtInputList.Text = String.Join(vbCrLf, strText, 1, strText.Length - 1)
txtComplete.AppendText(strText(0) + vbCrLf)
Next
End Sub
有人能帮忙吗?谢谢!
3条答案
按热度按时间5kgi1eie1#
不要将数据保存在UI中。使用数据结构保存数据,这样你就可以直接操作它(脱离UI线程),然后用数据的状态更新UI。如果你的数据只是一个字符串列表,那么使用
List(Of String)
,或者如果它不仅仅是字符串,那么使用List(Of someClass)
。我的回答将为您解决一些问题。
1.将数据保留在列表中
1.在UI线程外处理数据
1.使用Async/Await以确保没有UI阻塞
首先,一个保存数据的类。你可以选择一个漂亮的名字来显示,以及一个URL或任何你想在处理器中使用的其他属性
创建输入项和完整项的列表,我将使用10个项初始化输入,字母为A... J。还定义一个方法,将这两个列表放入TextBox中
添加一个Async按钮处理程序来处理所有项目,添加Task函数来处理每个项目。按钮处理程序不处理任何内容,而是在Awaited任务中处理。处理完每个项目后,重新绑定TextBox以更新UI。
如果您尝试使用这段代码,您可能会注意到它是在UI之外运行的,因此您的应用程序可以顺利运行。您只是在数据结构而不是UI上操作。这是一种很好的方法来完成您要做的事情。
如果您的处理可以并行完成,那么您应该研究一下Task Parallel Library,根据所使用的资源,您的工作可能会执行得更快。
8yoxcaq72#
尝试此操作,您需要更改文本框的名称。
nnvyjq4y3#
我完全同意djv的回答,但这里有一种直接使用UI的方法:
以下是它的实际应用: