我正在动态地将表单(将其视为“伪标签页”)分配给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”构造函数。但是,这是不允许的,因为get,“Type'UserControlsOnTabPagePOCApp.BasicInfoPseudoTab'已经定义了一个名为'BasicInfoPseudoTab'的成员,具有相同的参数类型”
Load()事件太晚了(当我在那里设置TopLevel属性时,它给了我一个错误的消息,直到我把它移到构造函数中。)
我需要做什么来覆盖(而不是重载)构造函数,或者我应该使用什么其他事件(在Load()事件之前做了什么?)
另外(我不想将相同的代码放在两个不同的问题中):表单本身在TabControl上显示正常,但我在设计时添加到表单/伪标签页面的控件没有在运行时显示 - 为什么?
答案 0 :(得分:2)
这不是覆盖构造函数的问题(构造函数不是那样的多态) - 这是构造函数已经存在的问题。我期待它已存在于您的代码中 - 如下所示:
public BasicInfoPseudoTab()
{
InitializeComponent();
}
您可以编辑该构造函数,而不是声明另一个无参数构造函数。请注意,您的其他构造函数应链接到该构造函数或调用InitializeComponent()
本身,以便所有设计器代码都可以执行其操作。