2009-08-31 20 views
7

tworzę własną kontrolę użytkownika, który zawiera tylko panel:C kontrola # użytkownik jako niestandardowego panelu

Kiedy przeciągnąć obiekt myPanel w projektanta, a następnie spróbuj dodać przycisk na nim, przycisk jest w rzeczywistości dodano do formantów formularza.

Czy istnieje właściwość/atrybut, które muszę ustawić, aby to wykonać, inny sposób robienia tego, co chcę?

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

Odpowiedz

2

Aby być bardziej precyzyjnym, I wykonaj następujące czynności:

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

Z myControlDesigner dla [Designer (typeof (myControlDesigner))], aby być

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"); 

    } 

} 

(Inne źródło: Add Control to UserControl)

+0

Użyłem twojego podejścia do tworzenia niestandardowego panelu. Ale kiedy używam tego niestandardowego panelu w innej kontroli użytkownika, kiedy przeciągam kontrolki na panelu w projektancie, początkowo pojawiają się. Ale kiedy rekompiluję, znikają. Nadal tam są, ale wygląda na to, że panel niestandardowy to przeciąganie po nich. Czy masz tego rodzaju problem? Korzystam z VS 2005/.NET 2.0. – bsh152s

+0

Nie, nie pamiętam, że miałem tego rodzaju problemy, czy masz małą próbkę? – Toto

+3

@ bsh152s To jest bardzo stara odpowiedź, ale chciałem zagłosować na temat problemu "kontroli są stracone": Panel/TableLayout, który jest odsłonięty, musi być publicznie ujawniony (publiczny modyfikator). Korzystając z tego kodu, dodałem również [DesignerSerializationVisibility (DesignerSerializationVisibility.Content)], aby zapewnić, że Visual Studio serializuje zmiany. –

Powiązane problemy