0

它不像在一个按钮中连续编码..
假设我想在显示“hello world”后显示“我很好”我想我当然可以用计时器来做到这一点,但我认为还有另一种方式,这就是我想要的暂时知道。

这是我的代码..

Private Sub btnSettings_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSettings.Click
    Dim str As String = rtb.Text
    Dim star() As String

    star = str.Split("="c, ":"c)

    txtIP.Text = star(3)




End Sub

此方法在富文本框中获取字符串的一部分。
现在,我需要将字符串的“部分”显示到多个文本框。
所以,我想要实现的是,在执行之后,我可以一次又一次地做吗?当然有不同的指标。
假设在索引 3 之后,我想要索引 4、索引 10 等等。谢谢!

4

1 回答 1

0

最简单的方法是使用 for each 循环。

  For Each s As String in star
    textIP.Text = s
    Threading.Thread.Sleep(1000) ' this line let us wait 1000 ms
  Next

这样你的应用程序就卡住了。一项改进是执行 Windows 事件,另一项改进是使用线程(如 BackGroundWorker/Timer)。首先让我们看看windows事件。

Dim i As Integer
Dim i2 as Integer
While i2 < star.Count
  Threading.Thread.Sleep(10) ' this line let us wait 10ms
  Application.DoEvents() ' this lines checks every 10ms, if an event occured
  If i Mod 100 = 0 Then ' every 100 running by, we change the text
      textIP.Text = star(i2)
      i2 += 1   
  End if
  i += 1
End While

BackGroundWorker 或 Timer 的最后一种方法提供了更大的灵活性,并且是在大型应用程序中使用的方法,或者如果您想在使用应用程序时长时间更改文本。要解释完整的 BackGroundWorker 解决方案需要更多时间,然后我现在有了。只需查看 BackGroundWorker (bgw)。在“bgw.DoWorkEvent”中,您必须在此处放置与第二种解决方案类似的代码。但是,您必须报告进度(“bgw.ReportProgress(star(i2)”)并获取“bgw.ProgressChangedEvent”中的文本,而不是“textIP.Text = star(i2)”行。“e.UserState”包含您的文本。不要忘记使用“bgw.WorkerSupportsProgressReport”激活 ProgressReport。

于 2013-11-04T09:31:58.763 回答