2012-10-30 27 views
1

我在导出TabPage中有一个封装控件,我无法将它对接到MainForm,它包含导出的TabPage对接一个封装的控件

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

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

下面是代码的示例:

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和控件正确地停靠。然后,我为tabpage创建了一个类(因为我需要许多不同数量的这些选项卡),并将与tabpage相关的所有内容都复制到CreateTab函数中。我将与tabpage属性相关的任何内容移至其构造函数中。我将控件封装在派生的TabPage中,并将所有与控件相关的所有内容都移至派生的tabpage中。

那么,我错过了什么?是否可以停靠封装的控件而不实现事件处理函数?

回答

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; 
}