C# 复选框以(取消)选中所有其他复选框
我已经创建了一个windows窗体,它(到目前为止)只包含复选框。构造函数接受一个参数:C# 复选框以(取消)选中所有其他复选框,c#,winforms,checkbox,C#,Winforms,Checkbox,我已经创建了一个windows窗体,它(到目前为止)只包含复选框。构造函数接受一个参数:string[]attributes。对于此属性数组中的每个字符串,我创建一个复选框 例如: string[] attributes = { "Black", "Red", "Blue" }; form1 = n
string[]attributes
。对于此属性数组中的每个字符串,我创建一个复选框
例如:
string[] attributes = {
"Black",
"Red",
"Blue"
};
form1 = new MyForm(attributes);
form1.Show();
将创建如下复选框:
[ ] Black
[ ] Red
[ ] Blue
这个很好用。现在,我的下一步是创建一个复选框“checkall”,它具有以下行为。我将使用此
引用我的“全选”复选框
当:
- 用户选中此
:选中所有其他复选框
用户取消选中此
:取消选中所有其他复选框
此
也被选中此
也被取消选中CheckedChanged
以下是我的代码(都是手工编写的,因此没有使用visual studio设计器):
使用系统;
使用系统图;
使用System.Windows.Forms;
类MyForm
{
公共MyForm(字符串[]属性)
{
控制(属性);
}
私有复选框[]m_属性;
私人复选框Mu all;
专用控件(字符串[]属性)
{
复选框dummy=新复选框();
int nAttr=attributes.Length;
m_属性=新复选框[nAttr];
for(int i=0;i
您可以添加一个布尔成员级变量,用于标记事件处理程序逻辑是否短路,或者您可以取消订阅属性\u CheckedChanged
中的所有\u CheckedChanged
,并在最后重新订阅。您可以添加一个布尔成员级别变量,该变量标记事件处理程序逻辑是否短路,或者您可以从属性\u CheckedChanged
中的all\u CheckedChanged
取消订阅,并在最后重新订阅。您可以检查all\u check控件是否在事件处理程序的开头具有焦点,如果没有焦点,则退出事件
private void all_CheckedChanged(object sender, EventArgs e)
{
if (!m_all.Focused)
return ;
if (m_all.Checked)
{
foreach (CheckBox cb in m_attributes)
{
cb.Checked = true;
}
}
else
{
foreach (CheckBox cb in m_attributes)
{
cb.Checked = false;
}
}
}
您可以检查All_check控件是否在事件处理程序的开头有焦点,如果没有焦点,则退出事件
private void all_CheckedChanged(object sender, EventArgs e)
{
if (!m_all.Focused)
return ;
if (m_all.Checked)
{
foreach (CheckBox cb in m_attributes)
{
cb.Checked = true;
}
}
else
{
foreach (CheckBox cb in m_attributes)
{
cb.Checked = false;
}
}
}
太棒了,我没想到。谢谢,如果没有其他答案,我很快就会接受:)太棒了,没想到。谢谢,如果没有其他答案,我很快就会接受:)嗯,另一个好的解决方案,我也会看一看,谢谢:挂起使用这个,在我看来更干净,特别是在给if语句添加了评论之后:)嗯,另一个好的解决方案,我也会看一看,谢谢:挂起使用这个,在我看来更干净,尤其是在if语句中添加注释后:)