我目前正在开发一个小型项目,作为在Visual Studio 2012中习惯Forms的一种方式,因为我通常只使用控制台应用程序。我当前的布局旨在使用选项卡,用户可以指定此应用程序所需的选项卡数量。然后,他们填写一些信息,然后将其格式化并输出到用户指定位置的文件中。关于问题。
为了阻止现有的重复标签,我使用以下内容:
private void comboTabs_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboSkills.SelectedIndex == 0)
{
tabControl1.TabPages.Remove(tab8);
tabControl1.TabPages.Remove(tab7);
tabControl1.TabPages.Remove(tab6);
tabControl1.TabPages.Remove(tab5);
tabControl1.TabPages.Remove(tab4);
}
//repeat for Index 1, 2 and so on
}
总会有至少3个选项卡,因此组合框中的第一个选项会删除选项卡4到8.下一个选项会执行相同操作,但随后会再次添加tab4。这将继续以下选择。我有什么方法可以更方便地做到这一点吗?
第二个问题,每个标签都有一系列文本框和组合框,用户可以从中选择信息。我遇到的问题是我需要确定用户选择了多少个选项卡,然后只从这些选项卡中提取信息。我知道我可以通过以下方式获得标签数量:
int numberoftabs = tabControl1.TabCount;
但在那之后,我似乎无法从他们那里读取信息。我打算做
for (int i = 0; i < numberoftabs; i++)
{
//get textbox text of tab i and so on
}
我有什么方法可以做到这一点?我希望使用标签布局,因为我非常喜欢我当前的布局。如果它有所不同,所有选项卡都具有相同的布局,并共享命名约定,如选项卡1文本框1是textTab1Name,选项卡2文本框2是textTab2Name,依此类推。
答案 0 :(得分:1)
对于问题的第一部分,您可以使用这段代码处理所有情况:
var tabCount = 5 - comboBox1.SelectedIndex;
for (var i = 0; i < tabCount; i++)
{
tabControl1.TabPages.RemoveAt(7-i);
}
对于第二部分,您必须创建此方法:
private T GetControl<T>(string name) where T : Control
{
return (T) this.Controls.Find(name, true).FirstOrDefault();
}
然后你可以像这样编写你的文本检索循环:
for (int i = 0; i < numberoftabs; i++)
{
//get textbox text of tab i and so on
TextBox textBox1 = GetControl<TextBox>("textTab" + i + "Name");
...
etc..
}