Как обеспечить поддержку дизайнера для TabControl, находящегося в UserControl, чтобы я мог перетаскивать элементы управления на вкладки? - PullRequest
0 голосов
/ 18 ноября 2011

У меня есть пользовательский элемент управления, который содержит как Panel, так и TabControl.Я включил поддержку времени разработки для обоих.Я могу перетаскивать элементы управления из панели инструментов на элемент управления Panel, который находится внутри пользовательского элемента управления.Я также могу добавлять и удалять вкладки через дизайнера в TabControl.Однако я не могу перетащить какие-либо элементы управления на сами страницы вкладок.

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

partial class TestUserControl
{
    private System.ComponentModel.IContainer components = null;

    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }

    #region Component Designer generated code

    private void InitializeComponent()
    {
        this.tabControl = new System.Windows.Forms.TabControl();
        this.contentPanel = new System.Windows.Forms.Panel();
        this.SuspendLayout();
        // 
        // tabControl
        // 
        this.tabControl.Dock = System.Windows.Forms.DockStyle.Fill;
        this.tabControl.Location = new System.Drawing.Point(0, 0);
        this.tabControl.Name = "tabControl";
        this.tabControl.SelectedIndex = 0;
        this.tabControl.Size = new System.Drawing.Size(306, 118);
        this.tabControl.TabIndex = 0;
        // 
        // contentPanel
        // 
        this.contentPanel.Dock = System.Windows.Forms.DockStyle.Bottom;
        this.contentPanel.Location = new System.Drawing.Point(0, 118);
        this.contentPanel.Name = "contentPanel";
        this.contentPanel.Size = new System.Drawing.Size(306, 73);
        this.contentPanel.TabIndex = 0;
        // 
        // TestUserControl
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.Controls.Add(this.tabControl);
        this.Controls.Add(this.contentPanel);
        this.Name = "TestUserControl";
        this.Size = new System.Drawing.Size(306, 191);
        this.ResumeLayout(false);

    }

    #endregion

    private System.Windows.Forms.TabControl tabControl;
    private System.Windows.Forms.Panel contentPanel;
}

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

[Designer(typeof(TestUserControlDesigner))]
public partial class TestUserControl : UserControl
{
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    public TabControl TabControl 
    {
        get { return this.tabControl; }
    }

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    public Panel ContentPanel
    {
        get { return this.contentPanel; }
    }

    public TestUserControl()
    {
        InitializeComponent();
    }
}

internal class TestUserControlDesigner : ParentControlDesigner
{
    public override void Initialize(System.ComponentModel.IComponent component)
    {
        base.Initialize(component);

        EnableDesignMode(
            (this.Control as TestUserControl).TabControl, "TabControl");
        EnableDesignMode(
            (this.Control as TestUserControl).ContentPanel, "ContentPanel");
    }
}

Что мне нужно сделать, чтобы я мог перетаскивать элементы управления на вкладки TabControl?

1 Ответ

2 голосов
/ 18 ноября 2011

Вы также должны включить режим дизайна на существующих вкладках:

internal class TestUserControlDesigner : ParentControlDesigner {
    public override void Initialize(System.ComponentModel.IComponent component) {
        base.Initialize(component);
        var ctl = (this.Control as TestUserControl).TabControl as TabControl;
        EnableDesignMode(ctl, "TabControl");
        foreach (TabPage page in ctl.TabPages) EnableDesignMode(page, page.Name);
        EnableDesignMode((this.Control as TestUserControl).ContentPanel, "ContentPanel");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...