C#复选框已选中计数
我在一个面板中有几个复选框和一个按钮,在一个选项卡页面中,在一个WinForm C#应用程序中 我试图做的是确保至少选中一个复选框,以便使按钮可单击,否则按钮将被禁用(灰色显示不可单击) 我尝试了这个(在C#复选框已选中计数,c#,winforms,checkbox,count,C#,Winforms,Checkbox,Count,我在一个面板中有几个复选框和一个按钮,在一个选项卡页面中,在一个WinForm C#应用程序中 我试图做的是确保至少选中一个复选框,以便使按钮可单击,否则按钮将被禁用(灰色显示不可单击) 我尝试了这个(在Form\u Load事件中),但没有成功: int counter = 0; foreach (Control p in tabPage1.Controls) { if (p is Panel) {
Form\u Load
事件中),但没有成功:
int counter = 0;
foreach (Control p in tabPage1.Controls)
{
if (p is Panel)
{
foreach (Control c in panel1.Controls)
{
if (c is CheckBox)
{
if (((CheckBox)c).Checked)
{
counter++;
}
if (counter < 1)
{
button1.Enabled = false;
}
else
{
button1.Enabled = true;
}
}
}
}
}
int计数器=0;
foreach(选项卡Page1.控件中的控件p)
{
如果(p为面板)
{
foreach(控制面板1中的控制c.控制)
{
如果(c是复选框)
{
如果(((复选框)c).选中)
{
计数器++;
}
如果(计数器<1)
{
按钮1.启用=错误;
}
其他的
{
按钮1.启用=真;
}
}
}
}
}
这可能是因为我使用了错误的事件或错误的位置来放置代码,或者代码本身不正确,有人可以看一看吗?您可以这样做(注意..您的特定循环是多余的..您知道容器的名称..为什么循环搜索它?)
if(panel1.Controls.OfType().Any(x=>x.Checked)){
//至少检查了一个。。
此代码应在两个位置运行:
- 加载带有任何保存值的复选框后,窗体的
事件Load
- 复选框“
事件处理程序,因此在选中复选框时更新按钮状态checked”已更改
foreach(tabPage1.Controls中的控件p)
{
如果(p为面板)
{
int计数器=0;
foreach(控制面板1中的控制c.控制)
{
如果(c是复选框)
{
如果(((复选框)c).选中)
{
计数器++;
}
如果(计数器<1){
按钮1.启用=错误;
}
否则{
按钮1.启用=真;
}
}
}
为什么不改用它呢?那么它就像获取CheckedListBox1.CheckedItems.Count
一样简单。亲爱的先生,在什么情况下我应该把它放在复选框的事件中呢?选中更改的事件。让你所有的复选框使用相同的checkedChanged
事件处理程序。这样你只需要把它放在那一个事件中。是无论如何,我可以避免在所有复选框中输入代码?是否只想在某处放置一些东西来计算选中了多少复选框?是的。您可以使所有复选框使用相同的CheckChanged
事件。请参阅此处:了解如何执行此操作。
if (panel1.Controls.OfType<CheckBox>().Any(x => x.Checked)) {
// at least one is checked..