2

我目前正在从事一个小型项目,以适应 Visual Studio 2012 中的表单,因为我通常只使用控制台应用程序。我当前的布局设计为使用选项卡,用户将指定他们需要多少个选项卡用于此应用程序。然后他们填写一些信息,并将其格式化并输出到用户指定位置的文件中。关于问题。

为了阻止现有的重复选项卡,我使用以下内容:

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。下一个选项会执行相同的操作,但随后会再次添加选项卡 4。这将继续进行以下选择。有什么方法可以让我更方便地做到这一点?

第二个问题,每个选项卡都有一系列文本框和组合框,用户可以从中选择信息。我遇到的问题是我需要确定用户选择了多少个选项卡,然后只从这些选项卡中提取信息。我知道我可以通过以下方式获得标签的数量:

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 等等。

4

1 回答 1

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..
}
于 2013-02-06T10:25:53.757 回答