通过复选框打开和关闭标签页

时间:2018-01-01 18:17:06

标签: c# winforms tabcontrol

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

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

-3

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

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

1 个答案:

答案 0 :(得分:1)

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

在第二种情况下,您尝试从TabPage中包含的页面池中删除新的TabControl实例。这显然不会产生任何结果,因为新的从未添加到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();
    }
}