1

我在派生中有一个封装的控件TabPage,我无法将它停靠到MainForm包含派生的表单TabPage

我已经TabPage正确添加了 和 控件,并且它们显示在MainForm. 但是,控件未正确停靠(样式:填充)。您可以通过调整表单大小来验证这一点。

我已经在派生的构造函数_control.Dock = System.Windows.Forms.DockStyle.Fill中设置了属性。_control.Anchor = Left | Right | Top | BottomTabPage

以下是代码示例:

public class DerivedTab : TabPage {
    public DerivedTab(){
        ...
        _control= new BrightIdeasSoftware.TreeListView();
        this.Controls.Add(this._control);
        _control.Anchor = System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right | System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom;
        _control.Dock = System.Windows.Forms.DockStyle.Fill;
        ...
    }
}

在 中MainForm,这是在运行时创建派生选项卡的函数:

    private DerivedTab CreateTab(string name)
    {
        DerivedTab tab = new DerivedTab(this, name);
        tab.SuspendLayout();

        MainTab.Controls.Add(tab);
        return tab;
    }

无论如何,我使用 Visual Studio Designer 生成了这段代码,并且控件正确停靠。然后,我为标签页创建了一个类(因为我需要许多不同数量的这些标签)并将与标签页相关的所有内容复制到CreateTab函数中。我将任何与标签页属性相关的内容移到了它的构造函数中。我将控件封装在派生中TabPage,并在派生标签页中移动与控件相关的所有内容。

那么,我错过了什么?是否可以在不实现事件处理函数的情况下对接封装的控件?

4

1 回答 1

1

我找到了解决我自己问题的方法。在 TabControl 添加 TabPage 后,必须调用 ResumeLayout 才能使 TabPage 正确停靠。

private DerivedTab CreateTab(string name)
{
    DerivedTab tab = new DerivedTab(this, name);
    tab.SuspendLayout();

    MainTab.Controls.Add(tab);
    tab.ResumeLayout();
    return tab;
}
于 2013-01-06T13:55:46.337 回答