如何在 TabControl C# 中将标签用于 hide/show 控件

How can I use tag to hide/show controls in TabControl C#

我有一个 TabControl MyTabs 包含一些标签和文本框,我正在尝试 hide/show MyTabs 中的控件和 show/hide 基于 RadioButton 检查的页面 :

private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
    foreach (var Ctrl in MyTabs.Controls.OfType<TextBox>())
    {
        if (Ctrl.Tag.ToString() == "Products")

        {
            Ctrl.Visible = false;
            PgBom.Hide();
        }
        else
        {
            Ctrl.Visible = true;
            PgBom.Show();
        }
    }

    foreach (var Ctrl in MyTabs.Controls.OfType<Label>())
    {
        if (Ctrl.Tag.ToString() == "Products")

        {
            Ctrl.Visible = false;
            PgBom.Hide();
        }
        else
        {
            Ctrl.Visible = true;
            PgBom.Show();
        }
    }


}

PgBom是MyTabs中的一个页面,我的代码有什么问题吗? . 提前致谢。

我很确定 TabControl 中的 Controls 会是 TabPages。标签和文本框等控件将进入特定的 TabPage。因此,要获得控件,则需要遍历所有不同的 TabPages 然后查看每个 TabPages Controls 集合,如下所示。

此外,将变量设置为... PgBom.Show();PgBom.Hide(); 在某种意义上是有问题的,因为当您循环遍历控件时,它可能会被隐藏并 un-hid 多次。最终显示的内容将取决于最后检查的控件的状态。

foreach (TabPage tp in MyTabs.TabPages) {
  foreach (var Ctrl in tp.Controls.OfType<TextBox>()) {
    if (Ctrl.Tag != null) {
      if (Ctrl.Tag.ToString() == "Products") {
        Ctrl.Visible = false;
        PgBom.Hide();
      }
      else {
        Ctrl.Visible = true;
        PgBom.Show();
      }
    }
  }
  foreach (var Ctrl in tp.Controls.OfType<Label>()) {
    if (Ctrl.Tag != null) {
      if (Ctrl.Tag.ToString() == "Products") {
        Ctrl.Visible = false;
        PgBom.Hide();
      }
      else {
        Ctrl.Visible = true;
        PgBom.Show();
      }
    }
  }
}