【问题标题】:PropertyGrid, DefaultValue, Unknown ColorsPropertyGrid,默认值,未知颜色
【发布时间】:2010-01-09 23:06:23
【问题描述】:

对任何人...对所有人,

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

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

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

209, 175, 171

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

我试过了:

[DefaultValue(typeof(Color),"209 , 175, 171")]
[DefaultValue(typeof(Color),"209,175,171")]

到目前为止还没有运气......

感谢您的帮助...

这个网站很震撼......当我在这个项目中跋涉时,它对我的​​帮助比任何其他网站都多......

卡森

【问题讨论】:

    标签: c# .net propertygrid


    【解决方案1】:

    我刚刚在 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 控件。

    当颜色设置为 209,175,171 时,它以普通文本显示。如果我更改任何值,它会显示为粗体。同样,当字符串设置为任何文本时,它是粗体,而当我将其设置为“foo”时,它会以普通文本显示。

    使用非默认值:

    使用默认值:

    【讨论】:

    • 这很奇怪...当您在字符串中的第一个值之后包含额外的空格时,它可以工作....换句话说,这有效: [DefaultValue(typeof(Color), "209 , 175, 171")] 在一百万年后我永远不会想到这一点,并制作了自定义转换器来处理这个问题......这不是:[DefaultValue(typeof(Color), "209, 175, 171 ")] 我不知道为什么,我也不在乎......你回答并解决了我的问题干杯
    • 你能不能试试 Color.Black (0,0,0)...当你用这个设置默认值时它似乎不起作用:[DefaultValue(typeof(Color), " 0 , 0, 0")]....niether 这样做: [DefaultValue(typeof(Color), "Black")] ..... 我认为这与 Black 是“已知”这一事实有关颜色......只是预感
    • 对于已知颜色,您还可以使用 [DefaultValue(typeof(Color), "Black")]。我尝试了各种空格和/或文本名称的组合(包括“Black”和“0,0,0”),一切都奏效了。
    • 它不适用于我的白色或黑色...请记住,默认值不是实际颜色,而是首先通过 Color.FromARGB 转换的 int...然后再次使用 255 的不透明度或 alpha 进行转换...换句话说,在属性中,我检查 var IsEmpty 是否存在,如果是,则进行双重转换以获得实体 ....示例:_ColorSunDay = Color.FromArgb(255, Color .FromArgb(Default.COLOR_SUN_DAY));...其中 Default.COLOR_SUN_DAY = 16777215... 我无法控制在这种情况下默认为 int 的值的形式或类型....坚持下去...
    【解决方案2】:

    同样的问题。 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; }
            }
    
        }
    

    它对我有用,我不知道问题到底出在哪里。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 2021-07-12
      • 1970-01-01
      相关资源
      最近更新 更多