繁体   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