我正在寻找一种在tabcontrol的特定选项卡上循环控制的方法。例如,我有一个带有以下选项卡的tabcontrol:
汽车, 宠物, 管理员
在每个选项卡上都有几个控件来显示/编辑/保存数据等。在“保存”按钮上,我想循环浏览该特定选项卡的控件,以检查是否已填写所有必填字段
因此,如果我在“汽车”选项卡上并单击“保存”,我只想通过“汽车”选项卡上的控件循环,而不是“宠物”或“管理”选项卡。
如何实现这一结果?
答案 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。一个CarUserControl
,PetUserControl
和AdminUserControl
例如然后,每个用户控件都知道如何创建正确的相应数据结构,因此您不必使用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);
}
}
}