簡體   English   中英

如何設置設計時屬性默認值?

[英]How to set design-time property default values?

根據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;
        }
    }
}

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

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
{
}

請參見DefaultValueAttribute

像這樣:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM