You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 01:48:00