获取一个类型的所有控件并更改它们的属性

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