如何在属性网格中将bool属性显示为Yes | No?

Ian*_*ose 10 .net propertygrid winforms

我知道我可以通过编写自定义类型描述符等来实现这一点,但是这个要求是多么简单; 我错过了一个简单的方法.

能够在BooleanConverter中设置"true"和"false"的字符串可能就是我所需要的,但是标准的BooleanConverter似乎不允许你设置自定义字符串.

Han*_*ant 11

你必须自定义它.像这样:

class YesNoConverter : BooleanConverter {
    public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) {
        if (value is bool && destinationType == typeof(string)) {
            return values[(bool)value ? 1 : 0];
        }
        return base.ConvertTo(context, culture, value, destinationType);
    }

    public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) {
        string txt = value as string;
        if (values[0] == txt) return false;
        if (values[1] == txt) return true;
        return base.ConvertFrom(context, culture, value);
    }

    private string[] values = new string[] { "No", "Yes" };
}
Run Code Online (Sandbox Code Playgroud)

样品用法:

class MyControl : Control {
    [TypeConverter(typeof(YesNoConverter))]
    public bool Prop { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

您没有得到System.Globalization的帮助,无法使用其他语言.

  • @Ian:你的GetStandardValues方法不应该返回你的字符串数组而是返回一个bool数组.由于基本BooleanConverter已经完成,因此您可以完全删除此方法. (2认同)