Создание пользовательского контейнера 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;
}
}