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;