基于ListView开发自动打字机如何实现列表内容循环输入?
自动打字机循环输入解决方案
问题根源
当前实现是在点击启动按钮时一次性将ListView所有条目拼接为带换行符的全局变量ListedItems,每次计时器触发时截取最前面的一行输出,剩余内容保留在ListedItems中。当所有内容都截取完成后,ListedItems仅保留最后一行内容且不会自动重置,因此后续每次触发都会重复输出最后一行。
代码修改方案
只需要调整计时器Tick事件的逻辑,在输出完最后一条内容后重新拼接ListView所有条目到ListedItems即可实现循环播放,修改后的完整代码如下:
1. 计时器Tick事件代码
Private Sub intervalTimer_Tick(sender As Object, e As EventArgs) Handles intervalTimer_Tick.Tick Dim SeprateLine As String Dim Separator As Integer If ListedItems.Contains(vbLf) Then Separator = ListedItems.IndexOf(vbLf) SeprateLine = ListedItems.Remove(Separator) ListedItems = ListedItems.Substring(Separator + 1) Else ' 取出最后一行 SeprateLine = ListedItems ' 输出完最后一行后重新加载所有列表内容,实现循环 ListedItems = "" For Each LVI As ListViewItem In ListView1.Items If ListedItems = "" Then ListedItems = LVI.Text Else ListedItems &= vbLf & LVI.Text End If Next End If SendKeys.Send(SeprateLine) SendKeys.Send("{ENTER}") End Sub
注:原有代码中Tick事件开头的
intervalTimer_Tick.Start()属于冗余代码,计时器启动后会按设定的间隔自动触发Tick事件,不需要每次触发时重复启动,直接删除该行即可。
2. 按钮点击事件代码(优化冗余逻辑)
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click ' 启动前先初始化加载所有列表内容 ListedItems = "" For Each LVI As ListViewItem In ListView1.Items If ListedItems = "" Then ListedItems = LVI.Text Else ListedItems &= vbLf & LVI.Text End If Next ' 启动计时器,仅需启动一次 intervalTimer.Start() End Sub
修改后每次遍历完ListView所有条目后,会自动重新加载所有条目,从第一条开始循环输出。
内容的提问来源于stack exchange,提问作者lotus
相关产品推荐
相关产品推荐

