是否有任何方法或是否可以在未选中(Windows窗体)复选框时编写一个方法来执行一组指令(但在选中时却没有)?我将澄清这一点,提供我的示例代码。
现有示例代码:
private void ChkBox_CheckedChanged(object sender, EventArgs e)
{
if (ChkBox.Checked == false)
{
MessageBox.Show("unchecked");
}
}
问:可以通过编写一个只在未选中复选框时执行的方法来避免if condition
。
插图: 像这样:
private void ChkBox_Unchecked(object sender, EventArgs e)
{
MessageBox.Show("unchecked");
}
其他评论:我没有为事件执行任何操作'复选框已选中'。所以只想通过将{{1}替换为checkchanged
来避免unchecked
事件事件类型。
答案 0 :(得分:5)
如果您确实需要这些奇怪的事件,请通过继承CheckBox来创建自定义复选框。覆盖它的OnCheckedChanged
事件,并添加您的Unchecked
事件:
public class StrageCheckBox : CheckBox
{
public event EventHandler Unchecked;
protected override void OnCheckedChanged(EventArgs e)
{
base.OnCheckedChanged(e);
if (!Checked)
OnUnchecked(e);
}
protected virtual void OnUnchecked(EventArgs e)
{
if (Unchecked != null)
Unchecked(this, e);
}
}
使用StrangeCheckBoxes
代替默认复选框。订阅Unchecked
活动。瞧,你有这种奇怪的行为。
备注实际上我不会建议在所有情况下使用自定义控件或if / else。如果您有许多具有此类行为的复选框,则自定义控件优于每个处理程序中的许多重复if / else。如果您有多个控件或所有复选框的单个处理程序,那么我将使用if / else方法。
答案 1 :(得分:2)
您可以继承CheckBox
和override OnCheckedChanged
class ExtendedCheckBox : CheckBox
{
public event EventHandler Unchecked;
protected override void OnCheckedChanged(EventArgs e)
{
base.OnCheckedChanged(e);
if (Checked == false)
OnUnchecked(e);
}
}
答案 2 :(得分:1)
不,唯一暴露的事件是检测到状态发生变化的时间,然后你必须检查状态以确定它是如何变化的。
如果愿意的话,你可以创建自己的控件,它实际上包含了这个控件,并暴露了这种状态区别的事件,但这似乎完全没有意义。
答案 3 :(得分:1)
不,抱歉。这是您可以触发状态更改的唯一事件。你的代码看起来很好。 你有什么理由不喜欢它吗?
答案 4 :(得分:0)
据我所知,事件是在所有更改中触发的,您可以编写自己的控件来区分所选的值并引发单独的事件,但不确定它是否真的值得。
答案 5 :(得分:0)
我认为你不能做这样的事情,但是如果你没有选中复选框并且你不想将它们封装在if
语句中,你可以检查{ {1}}在开头并返回:
checked
答案 6 :(得分:0)
这将是一个简单的直接解决方案,尽管最好的建议方法是从CheckBox继承并修改事件。但是,一种相对简单的方法如下:
缩小CheckBox Label
宽度,以便CheckBox Clicked
不再可见。只有框应该是可见的。然后,在框旁边添加另一个标签,该标签应该与框相互排斥。
现在,编辑<AssetsLibrary/AssetsLibrary.h>
事件。使用某种标志来标识复选框的状态。瞧!