1

我正在用 C# 编写一个应用程序,表单上的控件排列如下。

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

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

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

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

4

2 回答 2

2

可以尝试类似:

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

    string Question = ... ctl.Text;
}
于 2013-08-23T16:27:08.457 回答
0

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

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

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

无论如何,从严酷的教训中吸取了一些想法。

您所需要的只是对多项选择题(单选或多项选择等)的新要求,或者只是当前选项卡中的几个面板来获得一些调整大小的行为,并且突然之间

(CheckBox)Form.Controls[0].Controls[2].Controls[8]不仅难以理解,而且已经崩溃了……

于 2013-08-23T17:10:38.293 回答