Создание пользовательского контейнера winforms

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

Этот элемент управления, который я создаю, содержит некоторые другие элементы управления и группу GroupBox. Все, что мне нужно: когда элемент управления отключен в режиме разработки над моим настраиваемым элементом управления, я просто поставлю его внутри вложенного GroupBox.

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

Ответы

Ответ 1

Возможно, это, что вам нужно, я нашел его в CodeProject некоторое время назад:

Проектирование вложенных элементов управления:

В этой статье показано, как разрешить элемент управления, который является дочерним элементом другой элемент управления, чтобы принять управление, упавшее на него при проектировании время. Это не большая статья, в коде не так много, и это может быть не "официальным", а лучшим способом сделать это. Оно делает, однако, работайте и стабильны, насколько я смог проверить его.

Ответ 2

Вам нужно добавить атрибут конструктора в свой элемент управления и использовать тип, который имеет или является классом ParentControlDesigner (требуется ссылка на сборку System.Design.dll), например:

[Designer(typeof(MyCustomControlDesigner1))]
public partial class CustomControl1 : Control
{
    public CustomControl1()
    {
        MyBox = new GroupBox();
        InitializeComponent();
        MyBox.Text = "hello world";
        Controls.Add(MyBox);
    }

    public GroupBox MyBox { get; private set; }
}

public class MyCustomControlDesigner1 : ParentControlDesigner
{
    // When a control is parented, tell the parent is the GroupBox, not the control itself
    protected override Control GetParentForComponent(IComponent component)
    {
        CustomControl1 cc = (CustomControl1)Control;
        return cc.MyBox;
    }
}