我正在动态地将表单(将其视为“伪标签页”)分配给 tabcontrol。
我是这样做的:
// 主窗体,在设计时具有 TabControl:
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
int TabControlWidth = tabPageBasicInfo.Size.Width;
int TabControlHeight = tabPageBasicInfo.Size.Height;
if (e.Node.Name == "NodeWhatever")
{
BasicInfoPseudoTab bipt = new BasicInfoPseudoTab(TabControlWidth, TabControlHeight);
tabPageBasicInfo.Controls.Add(bipt);
bipt.Show();
}
// else NodeThis, NodeThat
}
// “伪标签页”表单上的构造函数:
// overloaded constructor, passing in the dimensions of the tab page
public BasicInfoPseudoTab(int ATabPageWidth, int ATabPageHeight)
{
this.TopLevel = false;
this.FormBorderStyle = FormBorderStyle.None;
this.Width = ATabPageWidth;
this.Height = ATabPageHeight;
this.Visible = true;
}
...但后来我尝试设置 Dock 属性:
public BasicInfoPseudoTab(int ATabPageWidth, int ATabPageHeight)
{
this.TopLevel = false;
this.FormBorderStyle = FormBorderStyle.None;
//this.Width = ATabPageWidth;
//this.Height = ATabPageHeight;
this.Visible = true;
this.Dock = DockStyle.Fill;
}
...而且效果很好,所以我想我会通过去掉两个 args 来使用“in the box”构造函数。但是,这是不允许的,因为获取,“类型'UserControlsOnTabPagePOCApp.BasicInfoPseudoTab'已经定义了一个名为'BasicInfoPseudoTab'的成员具有相同的参数类型”
Load() 事件为时已晚(当我在那里设置 TopLevel 属性时,它给了我一个错误消息,直到我将它移到构造函数中)。
我需要做什么来覆盖(而不是重载)构造函数,或者我应该使用什么其他事件(在 Load() 事件之前有什么事情吗?)
另外(我不想将相同的代码放在两个不同的问题中):表单本身在 TabControl 上显示良好,但我在设计时添加到表单/伪标记页面的控件在运行时不显示-时间 - 为什么?