C# PropertyGrid,默认值,未知颜色

C# PropertyGrid,默认值,未知颜色,c#,.net,propertygrid,C#,.net,Propertygrid,对任何人,对所有人 我的属性网格正在检查一个具有多个颜色属性的类 颜色不是系统颜色,也不是“已知”颜色 显示颜色时,网格中的文本值可能如下所示: 209, 175, 171 如何定义[Attribute]属性,以便在选择此颜色时,PropertyGrid了解已选择默认颜色 我试过: [DefaultValue(typeof(Color),"209 , 175, 171")] [DefaultValue(typeof(Color),"209,175,171")] 到目前为止没有运气 谢谢你的帮

对任何人,对所有人

我的属性网格正在检查一个具有多个颜色属性的类

颜色不是系统颜色,也不是“已知”颜色

显示颜色时,网格中的文本值可能如下所示:

209, 175, 171
如何定义[Attribute]属性,以便在选择此颜色时,PropertyGrid了解已选择默认颜色

我试过:

[DefaultValue(typeof(Color),"209 , 175, 171")]
[DefaultValue(typeof(Color),"209,175,171")]
到目前为止没有运气

谢谢你的帮助

这个网站的岩石…它帮助了我比任何其他网站,因为我通过这个项目跋涉


Carson

我刚刚在Windows窗体应用程序中尝试了这个功能,效果很好。这是我的整个应用程序:

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e) {
        propertyGrid1.SelectedObject = new Foo();
    }
}

public class Foo {
    [DefaultValue("foo")]
    public string MyString { get; set; }

    [DefaultValue(typeof(Color), "209 , 175, 171")]
    public Color MyColor { get; set; }
}
我的表单是一个默认表单,上面有一个
PropertyGrid
控件

当颜色设置为209175171时,它以普通文本显示。如果我更改任何值,它将显示为粗体。类似地,当字符串设置为任意文本时,它是粗体的,当我将其设置为“foo”时,它将显示为普通文本

使用非默认值:

使用默认值:

这里也有同样的问题。DefaultValue(typeof(Color)不适用于我

我必须这样做:

private void Form1_Load(object sender, EventArgs e)
    {
        MyCar car1 = new MyCar();
        this.propertyGrid1.SelectedObject = car1;
    }

    public class MyCar{
        //*****************************
        private Color MyColor_ = Color.Red;//<------------------------ Here
        //*****************************
        public Color MyColor
        {
            get { return MyColor_; }
            set { this.MyColor_ = value; }
        }

        private String Id_;
        public String Id
        {
            get { return Id_; }
            set { this.Id_ = value; }
        }

    }
private void Form1\u加载(对象发送方,事件参数e)
{
MyCar car1=新MyCar();
this.propertyGrid1.SelectedObject=car1;
}
公车{
//*****************************

private Color\ucolor=Color.Red;//这很奇怪……当在字符串中的第一个值后面包含额外的空格时,它就起作用了……换句话说,它起作用了:[DefaultValue(typeof(Color),“209,175,171”)]我永远也不会在一百万年内明白这一点,然后去定制转换器来处理这个问题……这不是:[DefaultValue(typeof(Color),“209,175,171”)]我不知道为什么,我也不在乎……你回答并解决了我的问题,你可以试试颜色。黑色(0,0,0)…当您使用以下命令设置默认值时,它似乎不起作用:[DefaultValue(typeof(Color),“0,0,0”)]。…niether这样做:[DefaultValue(typeof(Color),“Black”)]。…我认为这与黑色是“已知”颜色这一事实有关…对于已知颜色,您也可以使用[DefaultValue(typeof(Color),“Black”)].我尝试了各种空格和/或文本名称的组合(包括“Black”和“0,0,0”)这一切都起作用了。对我来说,它对白色或黑色都不起作用…请记住,默认值不是实际颜色,而是首先通过颜色转换的int。FromARGB…然后再转换一次,不透明度或alpha为255…换句话说,在属性中,我检查var是否为空,如果是空,则对获取实体…示例:_ColorSunDay=Color.FromArgb(255,Color.FromArgb(Default.Color\u SUN\u DAY));…其中Default.Color\u SUN\u DAY=16777215…我无法控制默认值的形式或类型,在本例中为int…坚持使用它。。。