检查TabControl c#

时间:2017-11-14 00:50:17

标签: c# winforms tabs

我想根据用户选择的选项动态更改选项卡控件中的选项卡。

我已按照此处的示例TabControl.TabPageCollection.Contains Method (TabPage)

我的代码如下;

private TabPage VulnTab;

VulnTab = new TabPage("Vulnerability");
if (tabControl1.TabPages.Contains(VulnTab) == true)
{
    tabControl1.SelectedTab = VulnTab;
}
else
{
    tabControl1.TabPages.Add(VulnTab);

    tabControl1.SelectedTab = VulnTab;
    var vuln = new vulnerability();
    tabControl1.SelectedTab.Controls.Add(vuln);
}

点击按钮即可触发。

在第一次运行时,没有VulnTab,因此它会成功创建一个。但是,在重新单击按钮时,它会再次创建一个新按钮,依此类推。

我希望它在第二个按钮上注意到标签页已经存在并且只是去那里。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

您的问题是,您每次都在创建全新的页面。 在定义私有TabPage对象时,可以将其移动到类(Form?)范围并检查它是否为null,如下例所示:

private TabPage VulnTab;

private void ButtonClicked(object sender, EventArgs args)
{
    if (VulnTab != null)
    {
        tabControl1.SelectedTab = VulnTab;
    }
    else
    {
        VulnTab = new TabPage("Vulnerability");
        tabControl1.TabPages.Add(VulnTab);

        tabControl1.SelectedTab = VulnTab;
        var vuln = new vulnerability();
        tabControl1.SelectedTab.Controls.Add(vuln);
    }
}

当然ButtonClicked只是触发您创建和/或更改标签的操作的任何方法。

供将来参考:如果您创建新对象(使用关键字new),则创建全新对象。它们可能是相同的,但它们不是一回事,就像两个看起来相同的苹果不是同一个苹果。只有在某些特定条件下(对象是简单类型(数字,DateTime)或实现IEquatable),在两个不同的位置创建的两个对象可能等于.NET。

答案 1 :(得分:1)

VulnTab = new TabPage("Vulnerability");
if (tabControl1.TabPages.Contains(VulnTab) == true)

您刚刚创建了一个全新的TabPage。显然,这不在TabPages

您只需创建一次即可检查现有实例。