Windows表单容器:Panel,如何访问特定索引处的元素?

时间:2015-05-22 15:26:55

标签: c# winforms

我希望检查我的面板中是否每两个元素都选中了一个复选框,我找不到任何允许在MSDN网站上的Panel手册中使用的属性或方法。

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

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

但问题在于,如果元素与面板中的复选框不同,则会发生错误,说明它无法将元素转换为复选框。

修改

为了增加关于我的案例的精确度,我有一个面板,其中有几个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
              }
           }
        }

2 个答案:

答案 0 :(得分:1)

这将获取CheckBox中的Panel控件,并返回已检查的总数:

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

答案 1 :(得分:0)

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

    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;
            }
        }

感谢所有帮助我的人。