簡體   English   中英

如何在Winforms的自定義控件中設置Colors的默認值?

[英]How to set the default value of Colors in a custom control in Winforms?

我得到了正確顯示的值:

    [DefaultValue ( typeof ( Color ), "255, 0, 0" )]
    public Color LineColor
    {
        get { return lineColor; }
        set { lineColor = value; Invalidate ( ); }
    }

但是在我重新加載項目后使用控件,這個值設置為白色,我可以調用重置再次回到紅色,但我不明白問題所在。

你應該如何設置默認值並確保它被保留,除非我手動更改默認值?

實際上我也在這樣做,它將 Back 和 ForeColor 設置為這些值,並且 VS 屬性編輯器將它們顯示為好像它們是從默認值更改的一樣。

這是錯的嗎?

    public CoolGroupBox ( )
    {
        InitializeComponent ( );
        base.BackColor = Color.FromArgb ( 5, 5, 5 );
        base.ForeColor = Color.FromArgb ( 0, 0, 0 );
    }

訣竅是使用顏色的Hex代碼:

    [DefaultValue(typeof(Color), "0xFF0000")]
    public Color LineColor
    {
            get { return lineColor; }
            set { lineColor = value; Invalidate ( ); }
    }

我想你也可以使用“255,0,0”,但我不確定,並且通常使用命名顏色或十六進制代碼。

將私有成員變量設置為您想要的默認顏色怎么樣?

private Color lineColor = Color.Red;

public Color LineColor
{
        get { return lineColor; }
        set { lineColor = value; Invalidate ( ); }
}

如果你想保留它,只需取出set訪問器。

編輯

我明白了,您希望設計器中的屬性列表顯示默認顏色。

您必須覆蓋基本控件的BackColor屬性,為屬性添加新的DefaultValueAttribute,然后在構造函數或InitializeComponent()方法(在designer.cs文件中)實際設置默認顏色,這可能是更好,因為這是為設計師。

public partial class RedBackgroundControl : UserControl
{
    public RedBackgroundControl()
    {
        InitializeComponent();
        base.BackColor = Color.Red;
    }

    [DefaultValue(typeof(Color), "Red")]
    new public Color BackColor
    {
        get
        {
            return base.BackColor;
        }
        set
        {
            base.BackColor = value;
        }
    }
}

[DefaultValue(...)]屬性是設計者和代碼生成器的提示。 它不是編譯器的指令。

此知識庫文章中的更多信息。

我沒有運氣使用具有Color類型或Font類型屬性的DefaultValue屬性,但我確實成功使用了msdn文檔中描述的這些方法:

“使用ShouldSerialize和Reset方法定義默認值” http://msdn.microsoft.com/en-us/library/53b8022e(v=vs.90).aspx

我分別使用Color.Emptynull作為我的私有支持字段的值,並且公共屬性總是返回一些有用的東西。

您可以在Initializecomponent方法的component.designer.cs中設置特定屬性:

  private void InitializeComponent()
    {
        components = new System.ComponentModel.Container();
        this.LineColor= System.Drawing.Color.FromArgb(255, 0, 0);
    }

重建項目,一切也應該出現在

我使用了這段代碼,它運行良好

Private _BackColorSelect As Color = Color.FromArgb(214, 234, 248)

<DefaultValue(GetType(Color), "214, 234, 248")>
Public Property BackColorSelect As Color
    Get
        Return _BackColorSelect
    End Get
    Set(value As Color)
        _BackColorSelect = value
    End Set
End Property

有相當多關於默認值屬性初始化的一篇文章在CodeProject

在DependencyProperty中使用UIPropertyMetadata

喜歡:

public static DependencyProperty TrueColorProperty = DependencyProperty.Register(
        "TrueColor", typeof (Color), typeof (LedControl), new UIPropertyMetadata(Colors.Red));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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