获取一个类型的所有控件并更改它们的属性
get all controls of a type and change their properties
在我的软件中,我有一个 TabControl
,我想使用 foreach
(例如)搜索特定类型的所有 Controls
,并更改其中的一些属性。
现在当我做这样的事情时:
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)
有什么帮助吗?
所以我解决了!乔恩斯基特是对的。 TabControl
中的选项卡不包含我正在寻找的控件,因为它们都在 GroupBox
中!
我在 GroupBox
中搜索了它们,它们就在那里。 CheckBoxes
未经检查,一切正常。
@Jon 感谢 "observing" 提示。我让程序使用 MessageBox
在选项卡中向我显示可用的 Controls
,这就是我解决它的方法。也感谢删除他的答案的用户,因为他向我介绍 OfType<>()
method.That 确实使代码看起来更好:
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);
}
}
}
foreach (Control item in ModuleTab.Controls)
{
if (item.GetType() == typeof(CheckedListBox)))
{
for (int i = 0; i < item.Items.Count; i++)
{
item.SetItemChecked(i, false);
}
}
}
在我的软件中,我有一个 TabControl
,我想使用 foreach
(例如)搜索特定类型的所有 Controls
,并更改其中的一些属性。
现在当我做这样的事情时:
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)
有什么帮助吗?
所以我解决了!乔恩斯基特是对的。 TabControl
中的选项卡不包含我正在寻找的控件,因为它们都在 GroupBox
中!
我在 GroupBox
中搜索了它们,它们就在那里。 CheckBoxes
未经检查,一切正常。
@Jon 感谢 "observing" 提示。我让程序使用 MessageBox
在选项卡中向我显示可用的 Controls
,这就是我解决它的方法。也感谢删除他的答案的用户,因为他向我介绍 OfType<>()
method.That 确实使代码看起来更好:
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);
}
}
}
foreach (Control item in ModuleTab.Controls)
{
if (item.GetType() == typeof(CheckedListBox)))
{
for (int i = 0; i < item.Items.Count; i++)
{
item.SetItemChecked(i, false);
}
}
}