【发布时间】: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