停靠封装控件

时间:2012-10-30 15:45:37

标签: c# winforms controls windows-forms-designer docking

我在派生的TabPage中有一个封装控件,我无法将其与包含派生MainForm的{​​{1}}格式对接。

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

我在派生的MainForm的构造函数中设置了属性_control.Dock = System.Windows.Forms.DockStyle.Fill_control.Anchor = Left | Right | Top | Bottom

以下是代码示例:

TabPage

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

无论如何,我使用Visual Studio Designer生成了此代码,并且控件正确停靠。然后,我为tabpage创建了一个类(因为我将需要许多不同数量的这些选项卡)并将与tabpage相关的所有内容复制到 private DerivedTab CreateTab(string name) { DerivedTab tab = new DerivedTab(this, name); tab.SuspendLayout(); MainTab.Controls.Add(tab); return tab; } 函数。我将与tabpage属性相关的任何内容移动到其构造函数中。我将控件封装在派生的CreateTab中,并在派生的标签页中移动了与控件相关的所有内容。

那么,我错过了什么?是否可以在不实现事件处理程序功能的情况下停靠封装的控件?

1 个答案:

答案 0 :(得分:1)

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

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

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