窗体容器:面板,如何访问特定索引处的元素

本文关键字:访问 索引 元素 面板 何访问 窗体 | 更新日期: 2023-09-27 17:50:23

我希望检查面板中是否每两个元素都选中一个复选框,但我在MSDN站点的面板手册中找不到任何允许这样做的属性或方法。

我知道我可以像这样检查每个元素:

   foreach (CheckBox currentCheck in this.panel_Schedule.Controls)
        {
            if (currentCheck.Checked)
            {
                nbScheduleModesChecked++;
            }
        }

但这里的问题是,如果一个元素与面板中的复选框不同,就会出现一个错误,说它不能将元素转换为复选框

编辑:

为了增加我的案例的精度,我有一个面板,其中有几个CheckBox,每个CheckBox后面都有一个NumericUpDown。我希望能够检查复选框是否被选中:

  • 计数选中复选框的总数(这已经被回答)
  • 改变NumericUpDown的状态来隐藏上面的复选框是否被选中。
  • 根据面板中没有的其他复选框更改复选框的状态为已选中或未选中。

我希望这能帮助你更好地理解我的问题。

编辑2 :

这是我希望得到的最好答案的一个例子

   for (int i;i < panel_Schedule.Controls.Count; i++)
        {
           if (panel_Schedule.__what i wish to know__[i].getType() == CheckBox)
           {
              if (panel_Schedule.__what i wish to know__[i].checked)
              {
                  //Do something like uncheck or make NumericUpDown appear
              }
           }
        }

窗体容器:面板,如何访问特定索引处的元素

这将在您的Panel中抓取CheckBox控件,并返回被选中的控件的总数:

int totalChecked = panel_Schedule.Controls.OfType<CheckBox>().Count(x => x.Checked);

多亏了上面的答案,我找到了我问题的答案。我搜索的是:

    panel_Schedule.Controls.OfType<CheckBox>().ElementAt<CheckBox>(index)

在我的代码中是这样的

    for (int index = 0; index < panel_Schedule.Controls.Count / 2; index++)
        {
            CheckBox currentCheck = panel_Schedule.Controls.OfType<CheckBox>().ElementAt<CheckBox>(index);
            if (currentCheck.Checked)
            {
                panel_Schedule.Controls.OfType<NumericUpDown>().ElementAt<NumericUpDown>(index).Visible = true;
                nbScheduleModesChecked++;
            }
            else
            {
                panel_Schedule.Controls.OfType<NumericUpDown>().ElementAt<NumericUpDown>(index).Visible = false;
            }
        }

感谢所有回答我问题的人。