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

时间:2009-10-05 20:27:24

标签: c# .net gdi+ winforms

我得到了正确显示的值:

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

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

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

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

这是错的吗?

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

7 个答案:

答案 0 :(得分:19)

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

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

我认为您也可以使用“255,0,0”,但我不确定并且通常使用命名颜色或十六进制代码。

答案 1 :(得分:8)

如何将私有成员变量设置为您想要的默认颜色?

private Color lineColor = Color.Red;

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

如果您希望保留,只需取出设置的访问者。

修改

我知道,您希望设计器中的属性列表显示默认颜色。

您必须覆盖基本控件的BackColor属性,为 new 属性添加新的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;
        }
    }
}

答案 2 :(得分:4)

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

this KB article中的更多信息。

答案 3 :(得分:0)

我没有运气使用类型为DefaultValue或类型为Color的属性的Font属性,但我确实成功使用了msdn文档中描述的这些方法:< / p>

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

我分别使用Color.Emptynull作为我的私人支持字段的值,并且公共属性总是返回一些有用的东西。

答案 4 :(得分:0)

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

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

重建项目,所有内容也应显示在

答案 5 :(得分:-1)

CodeProject

上有一篇关于defaultvalue属性初始化的文章

答案 6 :(得分:-1)

在DependencyProperty中使用UIPropertyMetadata

像:

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