我想根据用户选择的选项动态更改选项卡控件中的选项卡。
我已按照此处的示例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,因此它会成功创建一个。但是,在重新单击按钮时,它会再次创建一个新按钮,依此类推。
我希望它在第二个按钮上注意到标签页已经存在并且只是去那里。
我怎样才能做到这一点?
答案 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
。
您只需创建一次即可检查现有实例。