2009-08-31 64 views
7

puedo crear mi propio control de usuario que sólo contiene un panel:C# control de usuario como un panel personalizado

Cuando arrastra un objeto MyPanel en el diseñador y luego tratar de añadir un botón en él, el botón es, de hecho, agregado a los controles del formulario.

¿Hay alguna propiedad/atributo que debo configurar para hacer esto, otra forma de hacer lo que quiero?

public class MyPanel : UserControl 
{ 
    private Panel panelMain; 

    public MyPanel() 
    { 
     InitializeComponent(); 
    } 

    private void InitializeComponent() 
    { 
     this.panelMain = new System.Windows.Forms.Panel(); 
     this.SuspendLayout(); 
     // 
     // panelMain 
     // 
     this.panelMain.BackColor = System.Drawing.SystemColors.ActiveCaption; 
     this.panelMain.Dock = System.Windows.Forms.DockStyle.Fill; 
     this.panelMain.Location = new System.Drawing.Point(0, 0); 
     this.panelMain.Name = "panelMain"; 
     this.panelMain.Size = new System.Drawing.Size(150, 150); 
     this.panelMain.TabIndex = 0; 
     // 
     // myPanel 
     // 
     this.Controls.Add(this.panelMain); 
     this.Name = "MyPanel"; 
     this.ResumeLayout(false); 
    } 
} 

Respuesta

2

Para ser más precisos, hago lo siguiente:

[Designer(typeof(myControlDesigner))] 
public class MyPanel : UserControl 
{ 
    private TableLayoutPanel tableLayoutPanel1; 
    private Panel panelMain; 
    ... 

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] 
    public Panel InnerPanel 
    { 
     get { return panelMain; } 
     set { panelMain = value; } 
    } 

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] 
    public TableLayoutPanel InnerTableLayout 
    { 
     get { return tableLayoutPanel1; } 
     set { tableLayoutPanel1 = value; } 
    } 
} 

Con myControlDesigner para [Designer (typeof (myControlDesigner))] para ser

class myControlDesigner : ParentControlDesigner 
{ 

    public override void Initialize(IComponent component) 
    { 

     base.Initialize(component); 

     MyPanel myPanel = component as MyPanel; 
     this.EnableDesignMode(myPanel.InnerPanel, "InnerPanel"); 
     this.EnableDesignMode(myPanel.InnerTableLayout, "InnerTableLayout"); 

    } 

} 

(Otra fuente: Add Control to UserControl)

+0

He utilizado su enfoque para crear un panel personalizado. Pero cuando uso este panel personalizado en otro control de usuario, cuando arrastro controles en el panel en el diseñador, aparecen inicialmente. Pero, cuando recompilo, desaparecen. Todavía están allí, pero parece que el panel personalizado está sobre/detrás de ellos. ¿Tuviste este tipo de problema? Estoy usando VS 2005/.NET 2.0. – bsh152s

+0

No, no recuerdo haber tenido este tipo de problemas, ¿tiene una pequeña muestra? – Toto

+3

@ bsh152s Esta es una respuesta muy antigua, pero quería decir algo sobre el problema de los 'controles perdidos': El panel/TableLayout que está expuesto debe estar expuesto públicamente (modificador público). En mi uso de este código, también agregué [DesignerSerializationVisibility (DesignerSerializationVisibility.Content)] para asegurarme de que Visual Studio serializa los cambios. –

Cuestiones relacionadas