我正在用C#编写一个应用程序,并在表单上安排以下控件。
首先,有一个包含splitcontainer的子窗体,它带有两个面板,左边是Panel1,右边是Panel2。 Panel1包含复选框和文本框。 Panel2包含一个选项卡控件。以编程方式创建时,每个选项卡都包含复选框和文本框。
当我单击子窗体顶部的“保存”时,Panel1中所有控件的所有数据都会正确保存为二进制文件。然后,保存例程必须遍历选项卡控件中的每个选项卡,并从每个选项卡中的复选框和文本框中保存数据。以下是我到目前为止的情况:
foreach (TabPage tab in tabControl1.TabPages)
{
string Question = tbQuestion.Text(tabControl1.SelectedIndex);
}
不幸的是,tbQuestion.Text最终会在其下面出现一条摆动线,错误消息表明它“在当前上下文中不存在”。每个选项卡中的所有其他控件也会发生相同的情况。访问每个标签中的控件需要做什么?
答案 0 :(得分:2)
可以尝试类似:
foreach (TabPage tab in tabControl1.TabPages)
{
Control ctl = tp.Controls.Cast<Control>().Where(c=>c.Name=="tbQuestion").FirstOrDefault();
string Question = ... ctl.Text;
}
答案 1 :(得分:0)
如果您以编程方式创建它们,那么可以执行类似
的操作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]
不仅可理解,而且已经破产......