通过复选框打开和关闭标签页
Opening and Closing Tab Pages via Checkbox
我正在使用 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时,标签页不会关闭,当我再次选中它时,它会打开另一个相同的标签页。
我错过了什么或者我应该怎么做来纠正这个问题(如果我的目标是可能的话)?
只要 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();
}
}
我正在使用 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时,标签页不会关闭,当我再次选中它时,它会打开另一个相同的标签页。
我错过了什么或者我应该怎么做来纠正这个问题(如果我的目标是可能的话)?
只要 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();
}
}