如和 暫停 控件的 事件觸發

quickcccc 2009-03-06 03:30:01
使用以下的方法来暂停事件触发

对 DDE 根本是无用的

================================

Dim A As Boolean

Private Sub Form_Load()

Text1 = 0

A = True

Label1.LinkItem = "BookName"
Label1.LinkTopic = "CATDDE|Book"
Label1.LinkMode = 1 ' 启动 DDE 连线

End Sub


Private Sub Label1_Change()

If A = False Then Exit Sub ' 停止触发 Text1 累加

Text1 = Text1 + 1

End Sub

Private Sub Timer1_Timer() ' 计时器间隔 = 20 毫秒

A = False ' 停止触发

Label1.LinkRequest ' 结果 LinkRequest 命令一下, Text1 "照样" 累加 1 次

For 延迟 = 1 To 100000000 ' 使用 delay , Text1 "还是照样" 累加 1 次 ,
' 换句话 "此刻" Sub Label1_Change() 里面的 A1 其实还是 = True
Next

A = True
End Sub

========= [注1] "实验2" 使用 Rnd 时 , 这方法就可以成功 , 用 DDE 这方法就完全失败

Private Sub Timer1_Timer()
A = False
Label1.Caption = Rnd ' 成功 ---> 确实没有执行 Text1 = Text1 + 1
A = True
End Sub

[问题]

有什方法可解决 (感觉是不是要用 API ??)
...全文
93 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
熊孩子开学喽 2010-04-21
  • 打赏
  • 举报
回复
看到楼主的结帖率,忽然有点担心.
熊孩子开学喽 2010-04-21
  • 打赏
  • 举报
回复
问题不少
1:你的延时程序有很大问题, 靠循环来延时是很不可靠的, 不同的机器时间差很多.
你完全可以这样写:
Private Sub Timer1_Timer()
A= NOT A
END SUB
把时钟周期改长点,TIMER周期小于50就不可靠.

2:你说TEXT一直在加,那也很正常,按照你的程序,timer每20ms触发一次,触发过程中把A的值变2次,中间那个空循环数字再大也是没用的,基本不延时. 算你增加了10ms,那你的程序也每秒开关几十次,那你的肉眼又如何判断?

3:说道最最根本上,你如果想有控制的进行DDE通讯,那么你的DDE模式设置是有问题的.
因为你用的是Label1.LinkMode = 1, 即自动模式. 只要设为Label1.LinkMode = 2就可以做到当你想要通讯的时候再去取值了(当然还得加上通讯语句).
iland9876543210 2010-04-19
  • 打赏
  • 举报
回复
顶一个先,学习顺便

1,488

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧