窗体容器:面板,如何访问特定索引处的元素
本文关键字:访问 索引 元素 面板 何访问 窗体 | 更新日期: 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;
}
}
感谢所有回答我问题的人。