Пользовательский элемент управления C # в качестве пользовательской панели - PullRequest
8 голосов
/ 31 августа 2009

Я создаю свой собственный пользовательский элемент управления, который содержит только панель:

Когда я перетаскиваю объект myPanel в дизайнер, а затем пытаюсь добавить на него кнопку, кнопка фактически добавляется к элементам управления формы.

Есть ли свойство / атрибут, которые я должен установить, чтобы выполнить это, другой способ сделать то, что я хочу?

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

Ответы [ 2 ]

8 голосов
/ 31 августа 2009

Взгляните сюда

Как заставить объект UserControl действовать как время разработки контейнера элемента управления с помощью Visual C #

Но если вам нужны только расширенные функциональные возможности Panel, лучше наследовать непосредственно от Panel.

2 голосов
/ 31 августа 2009

Если быть более точным, я делаю следующее:

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

С myControlDesigner для [Designer (typeof (myControlDesigner))] должно быть

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

    }

}

(Другой источник: Добавить элемент управления в UserControl )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...