我正在尝试为我的自定义WinForms控件添加设计师支持,但看起来只有在我已经创建了实例时,设计师才处于活动状态,而不是在从工具箱拖放期间。
为了说明我的意思,我创建了一个简单的带有设计师的控件:
[Designer(typeof(MyButtonDesigner))]
public class MyButton:Button
{
public MyButton()
{
base.Size= new Size(50,50);
}
}
class MyButtonDesigner : ControlDesigner
{
public override bool CanBeParentedTo(IDesigner parentDesigner)
{
return parentDesigner != null && parentDesigner.Component is Form;
}
}
我希望我的控件只能由表单托管(用户只能将控件添加到表单,而不能添加到groupbox中)。 当我从工具箱拖动控件时,我的验证逻辑被跳过,但是当我尝试将控件实例从表单移动到groupbox时,我可以看到下拉菜单已经通过验证(如下图所示)。 我对ControlDesigner非常陌生,因此我不确定这种行为是否是设计问题,还是我可以更改它,以便在从工具箱拖动时进行验证。
我正在使用Visual Studio 2013,但我认为这不应该是问题。
if (host.RootComponent is Form) defaultValues["Parent"] = host.RootComponent;
它将更改拖放目标为Form
。我更喜欢显示错误消息。 - Reza Aghaei