“checked = false”的CheckBox(事件)方法

时间:2013-03-04 11:35:48

标签: c# .net winforms

是否有任何方法或是否可以在未选中(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事件事件类型。

7 个答案:

答案 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)

您可以继承CheckBoxoverride 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>事件。使用某种标志来标识复选框的状态。瞧!