2008-10-31 72 views
4

我想創建一個包含一些控件的TabPage的子類,並且我想通過設計器控制這些控件的佈局和屬性。但是,如果我在設計器中打開我的子類,我無法像在UserControl上那樣定位它們。我不想創建一個帶有UserControl實例的TabPage,我想直接設計TabPage。如何創建TabPage的子類,以便像UserControl一樣編輯?

我該怎麼做?我嘗試過更改Designer和DesignerCategory屬性,但我沒有找到任何有用的值。

回答

9

我以前有過類似的問題。

我做了第一次是從繼承用戶控件到標籤頁,像這樣

類的UserInterface開關:用戶控件//不要設計師位,然後將其更改爲

類的UserInterface:TabPage的

其次我只是把我的所有控件和用戶控件中的東西,並將它們停靠在一個tabpage中。

第三我做了一個通用類,它需要任何用戶控件並自動進行對接。

,所以你可以把你「的UserInterface」類只是得到一個類型,你可以添加到System.Windows.Forms.TabControl

public class UserTabControl<T> : TabPage 
    where T : UserControl, new() 
{ 
    private T _userControl; 
    public T UserControl 
    { 
     get{ return _userControl;} 
     set 
     {   
      _userControl = value; 
      OnUserControlChanged(EventArgs.Empty); 
     } 
    } 
    public event EventHandler UserControlChanged; 
    protected virtual void OnUserControlChanged(EventArgs e) 
    { 
     //add user control docked to tabpage 
     this.Controls.Clear();  
     UserControl.Dock = DockStyle.Fill; 
     this.Controls.Add(UserControl); 

     if (UserControlChanged != null) 
     { 
      UserControlChanged(this, e); 
     } 
    } 

    public UserTabControl() : this("UserTabControl") 
    { 
    } 

    public UserTabControl(string text) 
     : this(new T(),text) 
    { 
    } 

    public UserTabControl(T userControl) 
     : this(userControl, userControl.Name) 
    { 
    } 

    public UserTabControl(T userControl, string tabtext) 
     : base(tabtext) 
    { 
     InitializeComponent(); 
     UserControl = userControl; 
    } 

    private void InitializeComponent() 
    { 
     this.SuspendLayout(); 
     // 
     // UserTabControl 
     // 

     this.BackColor = System.Drawing.Color.Transparent; 
     this.Padding = new System.Windows.Forms.Padding(3); 
     this.UseVisualStyleBackColor = true; 
     this.ResumeLayout(false); 
    } 
} 
+0

爲我工作!羞恥沒有人接受這個惡毒。 – dcg 2011-10-17 09:56:06

+0

真正重要的部分是從TabPage更改爲UserControl。出於某種原因,如果Visual Studio從TabPage繼承,它將不會在設計器中顯示該控件。更改爲UserControl可立即解決此問題。現在它也出現在工具箱中。 – lanoxx 2011-11-15 01:20:17

1

我處理這種通過設計自己的網頁作爲單獨的形式,然後在運行時將其託管在標籤頁內。

如何在TabPage中放置表單?

form.TopLevel = false; 
form.Parent = tabPage; 
form.FormBorderStyle = FormBorderStyle.None; // otherwise you get a form with a 
              // title bar inside the tab page, 
              // which is a little odd 
相關問題