
VB中怎样用Timer控件控制其他事件?
比如,下面这个程序,我想把它改成用Timer控制i,然后每秒读取一次DimiDimNewFileAsStringDimCharAsStringFile="F:\test1...
比如,下面这个程序,我想把它改成用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下又会产生一个反复打开文件的错误。。。
怎么做才能实现一秒一个字的读取啊? 展开
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下又会产生一个反复打开文件的错误。。。
怎么做才能实现一秒一个字的读取啊? 展开
2个回答
展开全部
static i
Dim Char As String
Open "F:\test1.txt" For Input As #1
On Error GoTo E
if i < LOF(1) Then
Char = Input(i, #1)
Text1.Text = Text1.Text + Char
End If
i = i + 1
E: Exit Sub
Close 1
Dim Char As String
Open "F:\test1.txt" For Input As #1
On Error GoTo E
if i < LOF(1) Then
Char = Input(i, #1)
Text1.Text = Text1.Text + Char
End If
i = i + 1
E: Exit Sub
Close 1
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
原代码的问题:
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
Char = Input(i, #Fid) '你在这里写的代码是 Char = Input(1, #1) ,是不是写错了?我给你改成了 i
NewFile = NewFile + Char
Text1.Text = NewFile
IF i >= LOF(Fid) Then Timer1.Enable = False '如果文件已被读完,则停止计时器
Exit Sub
E:
Msgbox "Error:" & Err.Number
End Sub
别忘了在最后关闭文件:
Private Sub Form_Unload(Cancel As Integer)
On Error Resume Next
Close #Fid
End Sub
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
Char = Input(i, #Fid) '你在这里写的代码是 Char = Input(1, #1) ,是不是写错了?我给你改成了 i
NewFile = NewFile + Char
Text1.Text = NewFile
IF i >= LOF(Fid) Then Timer1.Enable = False '如果文件已被读完,则停止计时器
Exit Sub
E:
Msgbox "Error:" & Err.Number
End Sub
别忘了在最后关闭文件:
Private Sub Form_Unload(Cancel As Integer)
On Error Resume Next
Close #Fid
End Sub
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询