2012-10-30 58 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; 
}