2012-03-16 318 views
5

根據MSDN(http://msdn.microsoft.com/en-us/library/system.windows.forms.label.autosize.aspx),還有約LabelAutoSize屬性注:如何設置設計時屬性的默認值?

當使用設計添加到窗體,默認值是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; 
     } 
    } 
} 

回答

4

Label控制有一個屬性:

[ToolboxItem("System.Windows.Forms.Design.AutoSizeToolboxItem,System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] 

造成的怪AutoSize問題。

我可以通過這個禁用它:

[ToolboxItem(true)] 
class MyLabel : Label 
{ 
} 
+0

我現在無法在我的結尾測試這個,但是我會盡力爲您解決問題。 :) 我喜歡! – rfmodulator 2012-03-17 06:34:21

2

DefaultValueAttribute

像這樣:

public class MyLabel : Label 
{ 
    [System.ComponentModel.DefaultValue(false)] 
    public override bool AutoSize 
    { 
     get 
     { 
      return base.AutoSize; 
     } 
     set 
     { 
      base.AutoSize = value; 
     } 
    } 
} 

編輯:這不起作用如預期。 董的答案是正確的。 ...再次錯誤。

+0

不,這是行不通的。親自嘗試一下。 – EFanZh 2012-03-16 03:59:47

+0

@FanZh當然可以......你遇到什麼問題? – rfmodulator 2012-03-16 23:37:43

+0

如果從工具箱中拖動控件,Windows窗體設計器會自動生成'AutoSize = true'代碼。 – EFanZh 2012-03-17 01:46:06

6

只需使用繼承。不過,您必須使用自定義標籤而不是系統標籤。

public class MyLabel:Label 
{ 
    public MyLabel():base() 
    { 
     base.AutoSize = false; 
    } 
} 

您可以直接將它放入您的代碼並修改下面的代碼。或者你可以把這個類放到它自己的庫中,然後你可以把它加載到工具箱中並像其他任何組件一樣使用。

對於這個從工具箱工作,似乎你需要重寫InitLayout在,像下面,和屬性添加到自動調整大小屬性,因此它不會序列化到設計師

[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屬性,因爲當你放下它設置的標籤s時,在設計,即使您更改標籤實例爲你的類型,手動自動調整大小設置將覆蓋默認

+0

這也行不通。親自嘗試一下。 – EFanZh 2012-03-16 04:00:13

+0

我剛剛做到了。我將更新我的代碼以顯示如何實施。 – 2012-03-16 04:12:11

+0

嗯,這是你的評論中的錯字,因爲正常的默認值是正確的。所以,默認爲錯誤是你要求的.... – 2012-03-16 04:22:09