在我的软件中,我有一个TabControl
,我想使用Controls
(例如)搜索特定类型的所有foreach
并更改其中的一些属性。
现在当我做这样的事情时:
Control ctrl;
ctrl = My_CheckedListBox;
((CheckedListBox)ctrl).SetItemChecked(0, false);
它工作正常,复选框全部取消选中,没问题。但是当我使用foreach时他们不会:
foreach (Control item in ModuleTab.Controls)
{
if (item is CheckedListBox)
{
for (int i = 0; i < ((CheckedListBox)item).Items.Count; i++)
{
((CheckedListBox)item).SetItemChecked(i, false);
}
}
}
我知道这是因为item
不是Control
而是一个对象。我想知道是否有类似的东西:
foreach (Control ref item in ModuleTab.Controls)
任何帮助?
答案 0 :(得分:0)
所以我解决了! Jon Skeet是对的。 TabControl
中的标签不包含我要查找的控件,因为它们都在GroupBox
中!
我在GroupBox
搜索了他们,他们在那里。 CheckBoxes
未经检查,一切都完美无缺。
@Jon Thx的“观察”提示。我让程序使用Controls
向我显示标签中可用的MessageBox
,这就是我解决它的方法。对于删除了他的答案的用户也是如此,因为他引诱我使用OfType<>()
方法。这真的使代码看起来更好:
foreach (var groupbox in ModuleTab.Controls.OfType<GroupBox>())
{
foreach (var item in groupbox.Controls.OfType<CheckedListBox>())
{
for (int i = 0; i < item.Items.Count; i++)
{
item.SetItemChecked(i, false);
}
}
}
答案 1 :(得分:0)
foreach (Control item in ModuleTab.Controls)
{
if (item.GetType() == typeof(CheckedListBox)))
{
for (int i = 0; i < item.Items.Count; i++)
{
item.SetItemChecked(i, false);
}
}
}