[英]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.