Winforms 如何访问tabcontrol中的控件?

Winforms 如何访问tabcontrol中的控件?,winforms,controls,tabcontrol,Winforms,Controls,Tabcontrol,我正在用C#编写一个应用程序,在表单上有以下控件安排 首先,有一个子表单,它包含一个splitcontainer,它有两个面板,Panel1在左侧,Panel2在右侧。Panel1包含复选框和文本框。Panel2包含一个选项卡控件。以编程方式创建的每个选项卡都包含复选框和文本框 当我单击子窗体顶部的“保存”时,Panel1中所有控件的所有数据都会正确地保存到二进制文件中。然后,保存例程必须遍历选项卡控件中的每个选项卡,并保存每个选项卡中复选框和文本框中的数据。以下是我到目前为止的情况:

我正在用C#编写一个应用程序,在表单上有以下控件安排

首先,有一个子表单,它包含一个splitcontainer,它有两个面板,Panel1在左侧,Panel2在右侧。Panel1包含复选框和文本框。Panel2包含一个选项卡控件。以编程方式创建的每个选项卡都包含复选框和文本框

当我单击子窗体顶部的“保存”时,Panel1中所有控件的所有数据都会正确地保存到二进制文件中。然后,保存例程必须遍历选项卡控件中的每个选项卡,并保存每个选项卡中复选框和文本框中的数据。以下是我到目前为止的情况:

             foreach (TabPage tab in tabControl1.TabPages)
            {
                string Question = tbQuestion.Text(tabControl1.SelectedIndex);
            } 

不幸的是,tbQuestion.Text下面有一条摆动的线,错误消息表明它“在当前上下文中不存在”。每个选项卡中的所有其他控件也会出现同样的情况。我需要做什么才能访问每个选项卡中的控件?

可以尝试以下操作:

foreach (TabPage tab in tabControl1.TabPages)
{
    Control ctl = tp.Controls.Cast<Control>().Where(c=>c.Name=="tbQuestion").FirstOrDefault();

    string Question = ... ctl.Text;
}
foreach(tabControl1.TabPages中的TabPage选项卡)
{
Control ctl=tp.Controls.Cast()。其中(c=>c.Name==“tbQuestion”).FirstOrDefault();
字符串问题=…ctl.Text;
}

如果您以编程方式创建它们,您可以执行以下操作

Dictionary<TextBox,Checkbox> questionsAndAnswers = new Dictionary<TextBox,CheckBox>();
字典问题和答案=新字典();
然后在创建控件对时添加一个条目。 您还可以进一步使用
字典
。 另一种选择是将所有的迭代进行,并绑定到一个
列表
,其中
T
是一个包含问题答案抽象的类,以编程方式设置绑定,加载和保存代码只需处理一个简单的
列表
这听起来更复杂,但您可以使用它删除大量非常脆弱的代码。更好的是,您可以启动一个UserControl,最好通过一个接口在中构建所有这些行为

不管怎样,还是从惨痛的教训中汲取了一些想法

你所需要的只是一个多选题(单选题或多选题等)的新要求,或者只是在你当前的标签中的几个面板,以获得一些调整大小的行为和突然的变化


(复选框)表单。控件[0]。控件[2]。控件[8]
不仅不易理解,而且已经损坏…

谢谢你的想法,托尼。我一定会尝试一下这个想法。听起来正是我需要的。通过几个选项卡进行迭代听起来比我真正需要做的工作多得多。如果有更简单的方法,为什么不呢?