我想在 winforms 中创建一个与容器控件具有相同行为的控件。我的意思是:在设计模式下,当我将控件放入其中时,它会分组,就像一个组合框。
我正在创建的这个控件包含一些其他控件和一个 GroupBox。我需要的是:当一个控件在我的自定义控件上以设计模式放置时,我只需将它放在嵌套的 GroupBox 中。
但我不知道如何让我的控件在设计模式下响应这种动作。
我想在 winforms 中创建一个与容器控件具有相同行为的控件。我的意思是:在设计模式下,当我将控件放入其中时,它会分组,就像一个组合框。
我正在创建的这个控件包含一些其他控件和一个 GroupBox。我需要的是:当一个控件在我的自定义控件上以设计模式放置时,我只需将它放在嵌套的 GroupBox 中。
但我不知道如何让我的控件在设计模式下响应这种动作。
也许这就是你需要的,我前段时间在 CodeProject 找到了它:
设计嵌套控件:
本文演示了如何允许作为另一个控件的子控件的控件在设计时接受将控件拖放到其上。这不是一篇大文章,没有多少代码,这可能不是“官方”或最好的方法。但是,它确实有效,并且就我能够测试它而言是稳定的。
您需要将Designer 属性添加到您的控件,并使用派生自 ParentControlDesigner 类或者是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;
}
}