【问题标题】:Validating event fired from other controls?验证从其他控件触发的事件?
【发布时间】:2010-12-06 02:29:11
【问题描述】:

我有一个 CheckBox 作为表单上自定义控件的一部分。我处理它的 Validating 事件以确保最多勾选 5 个复选框。如果已勾选 5,我将取消该事件。这非常有效。

然而,现在,一旦我选中了 5 个复选框,每个 事件都会被取消(取消选中第一个选中的 CheckBox 除外)。这意味着按钮按下、文本框焦点、组合下拉和应用程序退出都不起作用。 sender 对象仍然是 CheckBox;只是不知道为什么会触发它。

为什么每次我做任何事情时都会触发复选框的验证事件? (我原以为它只会在您单击复选框控件时触发)。使用“验证”事件是否正确?

其他奇怪的事情:当我选择或取消选择第 5 个复选框时,没有处理任何事件,尽管那里有事件处理程序。如果它是第 4 个或第 6 个复选框,则相同的复选框将触发验证事件。

我的代码:在父表单中:

    private List<MyCustomClass> GetSelectedItems()
    {
        List<MyCustomClass> result = new List<MyCustomClass>();
        foreach (MyCustomClass c in listOfControls)
        {
            if (c.Selected())
            {
                result.Add(c);
            }
        }
        return result;
    }

    private void validate(object sender, CancelEventArgs e)
    {
        if (GetSelectedItems().Count == 5)
        {
             e.Cancel = true;
        }
    }

MyCustomClass 的Selected 方法只返回 chkBox.Checked。

【问题讨论】:

    标签: c# events validating


    【解决方案1】:

    您如何验证 CheckBox 的输入?它是truefalse。您是否将该检查与其他状态进行比较以确定当前检查状态是否有效?

    【讨论】:

    • “复选框的输入”是什么意思?
    • 当您单击复选框时,它会收到!chkBox.Checked...的值...
    • 我查看chkBox.Checked 的所有现有复选框,如果已经有5 个Checkedtrue,我将CancelEventArgs.Cancel 设置为false
    • false”是指“true”。即Cancel 设置为true
    猜你喜欢
    • 2019-06-20
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    相关资源
    最近更新 更多