【问题标题】:Check if tab exists in TabControl c#检查选项卡是否存在于 TabControl c#
【发布时间】:2017-11-14 00:50:17
【问题描述】:

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

我已经按照这里的例子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,因此它成功创建了一个。但是,在重新单击按钮时,它会再次创建一个新按钮,依此类推。

我希望它在第二个按钮单击时注意到标签页已经存在,然后就去那里。

我怎样才能做到这一点?

【问题讨论】:

  • == true没有意义。

标签: c# winforms tabs


【解决方案1】:

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

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),您将创建全新的对象。它们可能是相同的,但它们不是同一个东西,就像两个看起来一样的苹果不是同一个苹果。只有在某些特定条件下(对象是简单类型(数字、日期时间)或实现了 IEquatable),在两个不同位置创建的两个对象可能等于 .NET。

【讨论】:

  • @AdrianBrown 请查看我的答案的编辑,并更深入地解释您的代码出了什么问题,这样您以后就可以避免此类问题。另外,如果我的回答解决了您的问题,请将其标记为解决问题,这对我很有帮助;)
  • 非常感谢您提供的详细信息。标记为已回答(抱歉,我不得不等待计时器!)
【解决方案2】:
VulnTab = new TabPage("Vulnerability");
if (tabControl1.TabPages.Contains(VulnTab) == true)

您刚刚创建了一个全新的TabPage。显然,TabPages 中没有。

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

【讨论】:

  • 不确定我理解你的意思 - 让我们假设一个空白的 TabControl - 测试选项卡是否存在(如果 (tabControl1.TabPages.Contains(VulnTab) == true)) - 它没有创建它并且将其添加到 TabPages 集合中。在重新检查 TabPages 时,它肯定应该发现它现在存在?
  • 但是您正在重新检查一个不同的实例。
  • 我现在理解你了 - @Dominik Szymański 也指出了这一点,我有一个解决方案
  • 这应该是答案。为什么?因为如果标签页被删除,它仍然会作为标签控件的控件存在,并且 VulnTab != NULL 将报告标签存在,即使它不可见。我知道这是一篇旧帖子,但是..
【解决方案3】:

这是一个更好的方法:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多