【发布时间】:2016-04-19 22:30:01
【问题描述】:
我在GroupBox 中有一系列CheckBox(es),用于选择用户想要运行的报告。它们通常都是Checked,这是最常见的情况,但只想运行一个也很常见。我认为右键单击一个框将其打开并关闭所有其他框会很有用。
在复选框上实现MouseClick 事件很容易,但问题是它们有很多,并且列表不断被添加。所以第一个问题:有没有办法让单个 MouseClick 处理程序适用于任何复选框,甚至是我们还没有的复选框?
另一种选择似乎是使用GroupBox.Controls 集合循环检查复选框并查看单击了哪个复选框,然后根据需要为所有复选框设置Checked。然而,CheckBox always 似乎拦截了MouseClick 事件,即使AutoCheck 已关闭。所以我的第二个问题:有没有办法关闭复选框中的点击处理,以便群组处理事件?
如果有其他方法可以解决这个问题,请告诉我!
【问题讨论】:
-
使用一个通用的事件处理程序来处理它们。添加新的时,将其连接到同一个处理程序
-
好的,没有我想要的那么自动化,但它可以工作。但现在我很困惑如何解释鼠标位置。 e(vent).location 返回相对于 that 控件的值,因此您会得到像 32,24 这样的小数字。这在每个控件的范围内,因此我需要将坐标转换,但我不确定如何将其转换为通用参考框架。
-
至于您的第二个问题,尝试使用 mousedown 事件,您可以在其中检查以确保正在使用右键,将发件人分配给复选框类型的变量,通过复选框设置创建循环将它们设置为 false 并将保存发件人的变量设置为 true。
-
自动化程度较低是什么意思?这可以通过 AddHandler 并在运行时循环并添加您的控件来完成。
-
为什么需要定位?我认为这与检查点击有关?