我可以将代码添加到默认构造函数和另一个困境

时间:2012-03-22 21:37:34

标签: c# .net dynamic tabcontrol tabpage

我正在动态地将表单(将其视为“伪标签页”)分配给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上显示正常,但我在设计时添加到表单/伪标签页面的控件没有在运行时显示 - 为什么?

1 个答案:

答案 0 :(得分:2)

这不是覆盖构造函数的问题(构造函数不是那样的多态) - 这是构造函数已经存在的问题。我期待它已存在于您的代码中 - 如下所示:

public BasicInfoPseudoTab()
{
    InitializeComponent();
}

您可以编辑该构造函数,而不是声明另一个无参数构造函数。请注意,您的其他构造函数应链接到该构造函数或调用InitializeComponent()本身,以便所有设计器代码都可以执行其操作。