[英]How to set design-time property default values?
根据MSDN( http://msdn.microsoft.com/en-us/library/system.windows.forms.label.autosize.aspx ),有一个关于Label
的AutoSize
属性的说明:
使用设计器添加到表单时,默认值为true。 从代码实例化时,默认值为false。
问题是:如何覆盖Label
控件并将其AutoSize
属性的设计时默认值设置为false
?
(更新)
这不起作用:
class MyLabel : Label
{
const bool defaultAutoSize = false;
public MyLabel()
{
AutoSize = defaultAutoSize;
}
[DefaultValue(defaultAutoSize)]
public override bool AutoSize
{
get
{
return base.AutoSize;
}
set
{
base.AutoSize = value;
}
}
}
只需使用继承。 但是,您必须使用自定义标签而不是系统标签。
public class MyLabel:Label
{
public MyLabel():base()
{
base.AutoSize = false;
}
}
您可以将其直接放入代码中并修改代码,如下所示。 或者,您可以将此类放入其自己的库中,然后您可以将其加载到工具箱中并像使用任何其他组件一样使用。
为了在工具箱中工作,您似乎需要覆盖InitLayout,如下所示,并向AutoSize属性添加一个属性,以便它不会序列化到设计器中:
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[DefaultValue(false)]
public override bool AutoSize
{
get
{
return base.AutoSize;
}
set
{
base.AutoSize = value;
}
}
protected override void InitLayout()
{
base.InitLayout();
base.AutoSize = false;
}
如果您没有使用工具箱,那么一旦将正常标签放到表单上,就需要进入[Form].Designer.cs
并找到并修改标签:
this.label1 = new MyLabel();// new System.Windows.Forms.Label();
//this.label1.AutoSize = true;
您必须删除预设的AutoSize属性,因为当您删除标签时,它会将其设置在设计器中,即使您将标签实例化更改为您的类型,手动AutoSize设置也将覆盖您的默认值
Label
控件有一个属性:
[ToolboxItem("System.Windows.Forms.Design.AutoSizeToolboxItem,System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
这导致奇怪的AutoSize
问题。
我可以通过这个禁用它:
[ToolboxItem(true)]
class MyLabel : Label
{
}
像这样:
public class MyLabel : Label
{
[System.ComponentModel.DefaultValue(false)]
public override bool AutoSize
{
get
{
return base.AutoSize;
}
set
{
base.AutoSize = value;
}
}
}
编辑:这不能按预期工作。 董的答案是对的。 ...又错了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.