Перетаскивание элементов управления на пользовательский элемент управления становится скрытым - PullRequest
3 голосов
/ 18 апреля 2011

Я создал пользовательский элемент управления UserControl, в котором я поддерживаю перетаскивание элементов управления во время разработки.Мои элементы управления правильно добавляются в мой пользовательский элемент управления, однако они скрываются после того, как они попадают на пользовательский элемент управления.Чтобы сделать добавленный элемент управления видимым, я должен выбрать его и нажать кнопку IDE времени разработки "Переместить на передний план", чтобы увидеть добавленный элемент управления.Когда я перестраиваю решение, элементы управления снова становятся скрытыми.

Я воспроизвел проблему со следующим кодом.В IDE я создал простой пользовательский элемент управления «MyControl», к которому я добавил один элемент управления Panel, прикрепленный к «Fill».Этот пользовательский элемент управления «MyControl» затем должен быть сброшен на панель Windows.Затем перетащите другой элемент управления, например элемент управления Label или Buton, на пользовательский элемент управления, и он станет скрытым.

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

MyControl.Designer.cs:

namespace Test
{
    partial class MyControl
    {
        private System.ComponentModel.IContainer components = null;

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

        private void InitializeComponent()
        {
            this.panel1 = new System.Windows.Forms.Panel();
            this.SuspendLayout();
            // 
            // panel1
            // 
            this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.panel1.Location = new System.Drawing.Point(0, 0);
            this.panel1.Name = "panel1";
            this.panel1.Size = new System.Drawing.Size(150, 150);
            this.panel1.TabIndex = 0;
            // 
            // MyControl
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.Controls.Add(this.panel1);
            this.Name = "MyControl";
            this.ResumeLayout(false);

        }

        private System.Windows.Forms.Panel panel1;
    }
}

MyControl.cs:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.Design;

namespace Axiom.Controls
{
    [Designer(typeof(ParentControlDesigner))]
    public partial class MyControl : UserControl
    {
        public MyControl()
        {
            InitializeComponent();
        }

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

    internal class MyControlDesigner : ControlDesigner
    {
        public override void Initialize(IComponent component)
        {

            base.Initialize(component);

            MyControl control = component as MyControl;

            EnableDesignMode(control.ContentPanel, "ContentPanel");
        }
    }
}

Обновление:

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

  1. Вопрос
  2. Ссылочный товар

Я следовал вышеупомянутой статье и успешно перетаскивал элементы управления панели инструментов на элемент управления контейнера в моем пользовательском элементе управления во время разработки.

Ответы [ 2 ]

4 голосов
/ 18 апреля 2011

Проблема действительно довольно проста. Вы говорите, что создали UserControl, а затем добавили элемент управления Panel, который пристыкован, чтобы заполнить весь UserControl.

Таким образом, всякий раз, когда вы добавляете элементы управления в UserControl во время разработки, вы не добавляете их в элемент управления Panel, а вместо этого используете сам UserControl. Это приводит к тому, что они закрываются элементом управления Panel, который заполняет весь UserControl.

Вывод их на передний план является временным решением, поскольку они помещают их поверх панели управления. Однако он не помещает их внутри элемента управления Panel, поэтому они снова «исчезают» при перестройке проекта. Они на самом деле не исчезают, они просто снова скрываются элементом управления Panel, так как по умолчанию в Z-порядке они расположены под Panel.

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

Если вам абсолютно необходимо, чтобы элемент управления Panel заполнял ваш UserControl, вам нужно добавить строку кода, которая автоматически добавляет элемент управления, сбрасываемый в UserControl во время разработки, в коллекцию Controls для Панель Контроль.

0 голосов
/ 18 апреля 2011

Вы пытались установить свой пользовательский элемент управления во время разработки?

...