如何在Winforms中的自定义控件中设置颜色的默认值?

Joa*_*nge 16 .net c# gdi+ winforms

我得到的值正确显示使用:

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

但是在我重新加载项目后使用了控件,这个值被设置为White,我可以调用Reset来再次回到Red,但是我不明白这个问题.

除非我从默认值手动更改值,否则您应该如何设置默认值并确保保留默认值?

实际上我也这样做,它将Back和ForeColor设置为这些值,VS属性编辑器将它们显示为从默认值更改它们.

这是错的吗?

    public CoolGroupBox ( )
    {
        InitializeComponent ( );
        base.BackColor = Color.FromArgb ( 5, 5, 5 );
        base.ForeColor = Color.FromArgb ( 0, 0, 0 );
    }
Run Code Online (Sandbox Code Playgroud)

JDu*_*ley 21

诀窍是使用颜色的Hex代码:

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

我想你也可以使用"255,0,0",但我不确定,并且通常使用命名颜色或十六进制代码.


sco*_*ttm 9

将私有成员变量设置为您想要的默认颜色怎么样?

private Color lineColor = Color.Red;

public Color LineColor
{
        get { return lineColor; }
        set { lineColor = value; Invalidate ( ); }
}
Run Code Online (Sandbox Code Playgroud)

如果你想保留它,只需取出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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Ser*_*ier 4

[DefaultValue(...)]属性是对设计者和代码生成器的提示。它不是给编译器的指令。

此知识库文章中有更多信息。