【问题标题】:Opening and Closing Tab Pages via Checkbox通过复选框打开和关闭标签页
【发布时间】:2018-06-11 15:15:43
【问题描述】:

我正在使用 C# 开发 Windows 窗体应用程序。主窗体包含 TabControl 和复选框。 TabControl 的标签页包含子窗体。然后复选框应分别在选中和取消选中时打开和关闭特定的标签页。标签页最初在加载时不存在。

这是我所做的(子表单是 Form3,相关的 TabControl 是 tabForms):

private void checkBox1_CheckStateChanged(object sender, EventArgs e)
    {

        Form1 f1 = new Form1();
        f1.TopLevel = false;
        TabPage tp1 = new TabPage(f1.Text);


        if (checkBox1.Checked == true)
        {
            tabForms.TabPages.Add(tp1);
            tp1.Show();
            f1.Parent = tp1;
            f1.Show();
        }
        else
        {
            tp1.Hide();
            tabForms.TabPages.Remove(tp1);
            f1.Dispose();
        }
    }

使用此代码,打开选项卡不是问题。但是,当我取消选中 checkBox1 时,标签页不会关闭,当我再次选中它时,它会打开另一个相同的标签页。

我错过了什么或者我应该做些什么来纠正这个问题(如果我的目标是可能的)?

【问题讨论】:

  • new TabPage(f1.Text); 创建一个 *new" TabPage。如果它从未添加到 TabControl,则隐藏它没有意义。您必须找到现有的 TabPage。您可能不想创建一个新的我猜也是 Form1。如果需要,请始终保存并传递现有对象的引用。
  • 您试图隐藏的tp1 对象是您刚刚在方法顶部创建的对象,而不是第一次检查时创建的对象。为什么需要将表单放在选项卡中 - 它们都是容器控件
  • 我明白了。据我了解,我应该让 tp1 已经创建但在加载时隐藏?

标签: c# winforms tabcontrol


【解决方案1】:

每当CheckBox 状态发生变化时,您的代码都会创建一个全新的TabPage 控件实例。只要您必须添加 TabPage 就可以了,但在您尝试删除现有选项卡时则不行。

在第二种情况下,您尝试从包含在TabControl 中的页面池中删除一个新的TabPage 实例。这显然不会产生任何结果,因为新的从未添加到TabControl

TabPage tp1 = new TabPage(f1.Text);
tabForms.TabPages.Remove(tp1); //  instance not found, nothing is removed

改用以下方法,隐藏现有的TabPage,然后根据需要重用它:

private TabPage m_MyTabPage = new TabPage();

private void checkBox1_CheckStateChanged(object sender, EventArgs e)
{
    Form1 f1 = new Form1();
    f1.TopLevel = false;

    if (checkBox1.Checked)
    {
        m_MyTabPage.Text = f1.Text;
        tabForms.TabPages.Add(m_MyTabPage);

        tp1.Show();
        f1.Parent = tp1;
        f1.Show();
    }
    else
    {
        tp1.Hide();
        tabForms.TabPages.Remove(m_MyTabPage);
        f1.Dispose();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    相关资源
    最近更新 更多