VB中怎样用Timer控件控制其他事件?

来源:百度知道 编辑:UC知道 时间:2024/05/11 02:10:40
比如,下面这个程序,我想把它改成用Timer控制i,然后每秒读取一次
Dim i
Dim NewFile As String
Dim Char As String
File = "F:\test1.txt"
Open File For Input As #1
On Error GoTo E
For i = 1 To LOF(1)
Char = Input(1, #1)
NewFile = NewFile + Char
Text1.Text = NewFile
Next
i = i + 1
E: Exit Sub
Close 1

我不知怎么调用Timer,把这个程序直接放在Timer下又会产生一个反复打开文件的错误。。。
怎么做才能实现一秒一个字的读取啊?

原代码的问题:
1.计时器每过 [Interval] 毫秒就会自动触发 Timer() 事件,而你在其中又加了一个循环,让人不知所云
2.下面这段代码是始终无法执行到 Close 1 的,因为一旦跳到这段代码,首先执行的便是 Exit Sub ,于是程序就不会关闭这个文件。
E: Exit Sub
Close 1
同时,正确的语法应是:Close #1
3.最好不要频繁的打开、关闭文件,这样会影响程序的性能
4.你的变量 i 与 NewFile 的声明有问题。如果在某一事件中使用 Dim ,在其所在的事件结束后,变量就会被销毁。于是 NewFile 便始终只有一个字符。应该使用 Static 创建静态变量,或将这两个变量用 Dim 在(通用)(声明)处将其声明。

你可以在(通用)(声明)处(所有代码的最上面)声明:
Dim File As String '文件名
Dim Fid As Integer '文件号

把打开文件的代码放在窗体打开的事件里面:
Private Sub Form_Load()
Fid = FreeFile
File = "F:\test1.txt"
Open File For Input As #Fid
End Sub
注:此处你最好用 FreeFile 生成一个空闲的文件号。万一 #1 这个文件号被占用,那程序还是会出错的。

然后在定时器里面添加代码:

Private Sub Timer1_Timer()
Static i '因为 i 是随着定时器的事件一一累加的,所以要声明为静态变量。
Static NewFile As String '因为 NewFile 里的字符是随着定时器的事件一一累加的,所以要声明为静态变量。
Dim Char As String '因为 Char 只是作为临时变量,所以声明为普通变量。

On Error GoTo E
i = i + 1