【发布时间】:2013-01-14 19:24:12
【问题描述】:
给定
Dim cb As CheckBox = New CheckBox
AddHandler cb, AddressOf cb_CheckChanged
cb.Checked = True
...除了禁用控件外,我如何防止对 Checked 的分配引发 CheckChanged 事件?我在 MFC 中长大,只有当 U S E R 更改控件的状态时才会引发事件。软软在想什么?真的无法区分来自用户的事件和来自我自己的赋值语句的事件吗? 哎呀!
【问题讨论】:
-
如果它是一次性的(例如,您正在使用默认状态绘制 GUI),只需交换第二行和第三行代码。否则,你试图责怪 MS 做出了一个完全合乎逻辑的实现,这很有趣。
-
"真的不可能区分用户和我的赋值语句吗?" 一点也不难,你的赋值语句是可以禁用控件(或其处理程序)当它需要更改控件时,然后在完成后重新启用它们。真正的问题是为什么你的代码不能区分它自己和用户?
-
实际上,禁用控件也不会阻止加注。因此,我不得不在我的代码中乱扔丑陋的布尔值。这对于复选框和单选按钮来说尤其麻烦。我对这种相对于 MFC 的设计更改确实有过错。我基于 30 年的经验。
-
30 年来一直以同样的方式做事现在对您没有帮助。 .NET 中的方法与它在 Windows 中的工作方式根本不同,Windows 是一种更强大的观察者模式模型,任何人都可以观察。包括完全没有意识到是您的代码而不是用户更改了检查状态的代码。如果你有一堆布尔标志,那么你做错了。获得所需脑移植的唯一方法是努力摆脱它们。
标签: .net vb.net events controls