Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 选择特定组合框项目时禁用控件_C#_Winforms - Fatal编程技术网

C# 选择特定组合框项目时禁用控件

C# 选择特定组合框项目时禁用控件,c#,winforms,C#,Winforms,我正在编写一个相当简单的应用程序,用户可以在其中选择某些输入并处理数据。我遇到一个问题,当用户从一个组合框中选择一个特定的字符串时,它不会禁用其他控件。基本上,当用户选择组合框并选择“启动”时,应禁用所有其他控件 private void cbalpha_SelectedIndexChanged(object sender, EventArgs e) { var operatorcheckbox = (CheckBox)sender; foreach (Control cb in

我正在编写一个相当简单的应用程序,用户可以在其中选择某些输入并处理数据。我遇到一个问题,当用户从一个组合框中选择一个特定的字符串时,它不会禁用其他控件。基本上,当用户选择组合框并选择“启动”时,应禁用所有其他控件

private void cbalpha_SelectedIndexChanged(object sender, EventArgs e)
{
    var operatorcheckbox = (CheckBox)sender;
    foreach (Control cb in this.Controls)
        if ((StringtDataChoiceorSelect.SelectedItem != "(Initiate)")
        {
            continue;
        }
        else
        {
            cb.Enabled = operatorcheckbox.Checked;
        }
}
试一试


如果要禁用所有控件,为什么要使用复选框值启用禁用。应该是这样的

private void cbalpha_SelectedIndexChanged(object sender, EventArgs e)
    {

        bool isEnabled = string.Compare(StringtDataChoiceorSelect.SelectedItem.ToString(),"(Initiate)",StringComparison.OrdinalIgnoreCase) == 0;
        foreach (Control cb in this.Controls)
            cb.Enabled = !isEnabled ;

    }

在SelectedIndexChanged事件上,检查所选对象是否与要禁用其他控件的对象相同,然后禁用它

protected void ddltext_SelectedIndexChanged(object sender, EventArgs e)
{
    if (ddlPerc.SelectedValue.Equals("0.01"))
    {
        txtbox.Enabled = false;
    }
}

我会使用代理和事件来实现这一点

if(operatorcheckbox.Checked && 
    StringtDataChoiceorSelect.SelectedItem == "(Initiate)")
{
    EventHandler -= checkboxdelegate;
}
else
    EventHandler += checkboxdelegate;

如果有不希望保持启用状态的控件,则可以添加方法。

检查所选项目的值
SelectedIndexChanged
是组合框的事件,因此
发送者
应该是
组合框
,但是在
cbalpha\u SelectedIndexChanged
处理程序中将
发送者
转换为
复选框
,这很有趣。它应引发无效的强制转换异常。:)你认为
sender
属于
CheckBox
ComboBox
类型吗?@KingKing是的。这也是错误的。我没注意到。编辑。不需要Altogater。嗨,对不起,是的,这是一个组合框,不知道为什么我有复选框。在您的解决方案中,如果选择了任何组合框项目,控件将禁用,而不是仅在选择了“启动”时禁用控件?@user2637869 StringtDataChoiceorSelect.SelectedItem的值是多少?这意味着您在该字段中没有得到正确的值。将调试器放在它上面,然后查看值它将返回正确的值,当我将调试器悬停在i get“(启动)”上时,您认为
sender
类型是
CheckBox
还是
ComboBox
if(operatorcheckbox.Checked && 
    StringtDataChoiceorSelect.SelectedItem == "(Initiate)")
{
    EventHandler -= checkboxdelegate;
}
else
    EventHandler += checkboxdelegate;