我正在寻找一种方法来循环遍历选项卡控件中的控件。例如,我有一个选项卡控件,其中包括以下选项卡:Cars、Pets、Admin。每个选项卡上都有几个控件,用于显示/编辑/保存数据等等。在“保存”按钮上,我想循环遍历该特定选项卡的控件,以检查是否填写了所有必填字段。因此,如果我在Cars选项卡上单击“保存”,我希望仅循环遍历Cars选项卡上的控件,而不是Pets或Admin选项卡上的控件。如何实现这个结果?
如果要循环遍历TabControl的控件,您需要使用Controls属性。
这里有一个关于TabControl的MSDN文章。
示例:
TabPage page = aTabControl.SelectedTab;
var controls = page.Controls;
foreach (var control in controls)
{
//do stuff
}
CarUserControl
、PetUserControl
和AdminUserControl
。然后每个用户控件都知道如何创建相应的数据结构,这样您就不必手动使用选项卡之间的循环等方法将它们合并在同一抽象级别上。以下是我编写的应用程序中,想要获取特定选项卡中的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();
}
}
Controls
属性是解决问题的方法...
foreach(Control c in currentTab.Controls)
{
if(c is TextBox)
// check for text change
if(c is CheckBox)
//check for check change
etc...
}
TabControl有一个SelectedTab属性,所以你可以像这样做:
foreach(Control c in tabControl.SelectedTab.Controls)
{
//do checks
}
foreach (Control c in this.tabControl1.SelectedTab.Controls)
{
// Do something
}
我也有需要禁用或启用选项卡中的控件。不过,我必须更加通用化。希望这能帮助到大家,而且我没有犯错。
private void toggleControls(Control control, bool state)
{
foreach (Control c in control.Controls)
{
c.Enabled = state;
if (c is Control)
{
toggleControls(c, state);
}
}
}
foreach (var control in CarsTab.controls) { } }```
- undefined