如何访问tabcontrol中的控件



我正在用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;
}

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

Dictionary<TextBox,Checkbox> questionsAndAnswers = new Dictionary<TextBox,CheckBox>();

然后在创建控件对时添加一个条目。您可以更进一步,使用Dictionary<string,bool>。另一种选择是去掉所有的迭代并绑定到List<T>,其中T是一个包含QuestionAnswer抽象的类,以编程方式设置绑定,您的加载和保存代码只需要处理一个简单的List<T>它听起来更复杂,但你可以用它删除大量非常脆弱的代码。更好的是,你可以构建一个UserControl,并最好通过接口构建所有这些行为。

从严酷的教训中吸取了一些想法。

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

(CheckBox)Form.Controls[0].Controls[2].Controls[8]不仅不太容易理解,而且已经崩溃。。。

最新更新