Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.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_Checkbox_Count - Fatal编程技术网

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) {

我在一个面板中有几个复选框和一个按钮,在一个选项卡页面中,在一个WinForm C#应用程序中

我试图做的是确保至少选中一个复选框,以便使按钮可单击,否则按钮将被禁用(灰色显示不可单击)

我尝试了这个(在
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”已更改
    事件处理程序,因此在选中复选框时更新按钮状态
拆下此零件 您从未在下面的代码中使用“p”变量

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..