0

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

4

1 回答 1

2

这不是重写构造函数的问题(构造函数无论如何都不是多态的) - 这是构造函数已经存在的问题。我希望它已经存在于您的代码中 - 如下所示:

public BasicInfoPseudoTab()
{
    InitializeComponent();
}

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

于 2012-03-22T21:40:39.563 回答