首页 > 解决方案 > 带计时器的 RichTextBox 阅读器

问题描述

我有一个显示 的 Button OpenFileDialog,因此我可以选择一个.txt文件并将其显示在RichTextBox1.
我希望当我按下时Go,以 5 秒的延迟逐行读取文本文件并显示读取的每一行Label4

我有 5 行test.txt文件。现在我从我正在使用的软件中选择这个文件,当我选择这个文件时,它会将我的test.txt文件结果放入RichTextBox.

我希望当我单击时Go,它会读取第 1 行 5 秒,然后在读取时将其显示在Label4. 然后,5 秒后,它开始读取第 2 行并显示它,Label4依此类推,直到读取所有行。

这是我的代码:

Imports System.Runtime.InteropServices

Public Class Form1

    <Runtime.InteropServices.DllImport("wininet.dll", SetLastError:=True)>
    Private Shared Function InternetSetOption(ByVal hInternet As IntPtr, ByVal dwOption As Integer, ByVal lpBuffer As IntPtr, ByVal lpdwBufferLength As Integer) As Boolean
    End Function

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    End Sub

    Public Structure Struct_INTERNET_PROXY_INFO
        Public dwAccessType As Integer
        Public proxy As IntPtr
        Public proxyBypass As IntPtr
    End Structure

    Private Sub UseProxy(ByVal strProxy As String)
        Const INTERNET_OPTION_PROXY As Integer = 38
        Const INTERNET_OPEN_TYPE_PROXY As Integer = 3

        Dim struct_IPI As Struct_INTERNET_PROXY_INFO

        struct_IPI.dwAccessType = INTERNET_OPEN_TYPE_PROXY
        struct_IPI.proxy = Marshal.StringToHGlobalAnsi(strProxy)
        struct_IPI.proxyBypass = Marshal.StringToHGlobalAnsi("local")

        Dim intptrStruct As IntPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(struct_IPI))

        Marshal.StructureToPtr(struct_IPI, intptrStruct, True)
        Dim iReturn As Boolean = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_PROXY, intptrStruct, System.Runtime.InteropServices.Marshal.SizeOf(struct_IPI))
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

        Label4.Text = (RichTextBox1.Text)
        UseProxy(Label4.Text)
        WebBrowser1.Navigate(TextBox3.Text)
    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        If (OpenFileDialog1.ShowDialog = DialogResult.OK) Then
            RichTextBox1.Text = My.Computer.FileSystem.ReadAllText(OpenFileDialog1.FileName)
        End If
    End Sub
End Class

标签: vb.net

解决方案


在设计器中将 Timer 添加到您的表单中,设置间隔然后处理 Timer.Tick 事件。

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Timer1.Interval = 5000
        Timer1.Start()
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        Static i As Integer
        If i < RichTextBox1.Lines.Count Then
            Label1.Text = RichTextBox1.Lines(i)
            i += 1
        Else
            Label1.Text = ""
            Timer1.Stop()
        End If
End Sub

推荐阅读