循环访问TabControl中的控件

时间:2009-11-16 19:47:49

标签: c# winforms loops foreach tabcontrol

我正在寻找一种在tabcontrol的特定选项卡上循环控制的方法。例如,我有一个带有以下选项卡的tabcontrol:

汽车, 宠物, 管理员

在每个选项卡上都有几个控件来显示/编辑/保存数据等。在“保存”按钮上,我想循环浏览该特定选项卡的控件,以检查是否已填写所有必填字段

因此,如果我在“汽车”选项卡上并单击“保存”,我只想通过“汽车”选项卡上的控件循环,而不是“宠物”或“管理”选项卡。

如何实现这一结果?

7 个答案:

答案 0 :(得分:10)

至于循环TabControl的控件,您需要使用Controls属性。

这是TabControl上的MSDN article

示例:

        TabPage page = aTabControl.SelectedTab;

        var controls = page.Controls;

        foreach (var control in controls)
        {
            //do stuff
        }

答案 1 :(得分:8)

我觉得重要的是要注意,一般来说,您应该对您的应用程序采取更有条理的方法。例如,不是在三个标签页上具有所有控件,而是在每个标签页上包含一个UserControl。一个CarUserControlPetUserControlAdminUserControl例如然后,每个用户控件都知道如何创建正确的相应数据结构,因此您不必使用inter-tab循环等等手动将它们全部放在同一抽象级别。

这种关注点的分离将使您更容易推理您的计划,并且是为您未来的职业生涯编写可维护代码的良好实践。

答案 2 :(得分:2)

我希望在我编写的应用程序的特定选项卡中获取DataGridView的示例。

TabPage pg = tabControl1.SelectedTab;

// Get all the controls here
Control.ControlCollection col = pg.Controls;

// should have only one dgv
foreach (Control myControl in col)
{
    if (myControl.ToString() == "System.Windows.Forms.DataGridView")
    {
        DataGridView tempdgv = (DataGridView)myControl;   
        tempdgv.SelectAll();
    }
}

答案 3 :(得分:1)

Controls属性是要走的路......

foreach(Control c in currentTab.Controls)
{
    if(c is TextBox)
        // check for text change
    if(c is CheckBox)
        //check for check change
    etc...
}

答案 4 :(得分:0)

TabControl有一个SelectedTab属性,所以你可以这样做:

foreach(Control c in tabControl.SelectedTab.Controls)
{
    //do checks
}

答案 5 :(得分:0)

foreach (Control c in this.tabControl1.SelectedTab.Controls)
{
  // Do something
}

答案 6 :(得分:0)

我还需要禁用或启用标签控件。我不得不更通用一点。希望它有助于人们和我没有犯错误

    private void toggleControls(Control control, bool state)
    {
        foreach (Control c in control.Controls)
        {
            c.Enabled = state;
            if (c is Control)
            {
                toggleControls(c, state);
            }
        }
    }