wha*_*ist 4 .net c# propertygrid winforms
我正在尝试编辑 PropertyGrid 控件中的复杂对象。我添加了 ExpandableObjectConverter(或我需要时我自己的子类)作为 TypeConverter 并且它工作正常。
我似乎无法弄清楚的一件事是。在网格中,对象本身将有其 .ToString() 表示形式。然后当我展开对象时,属性具有相同的属性。都可以编辑。我想禁用 ToString() 对象字段的编辑,但保持属性可编辑。
所以在 PropertyGrid 中它看起来像这样;
+ Color {(R,G,B,A) = (255,255,255,255)} --uneditable
Alpha 255 --editable
Blue 255 --editable
Green 255 --editable
Red 255 --editable
Run Code Online (Sandbox Code Playgroud)
到目前为止,我还没有找到一种方法来做到这一点。如果我尝试将其设为只读,则整个对象将变为只读。如果我指定我自己的 ExpandableObjectConverter 并声明它不能从字符串转换,如果在 PropertyGrid 中编辑字符串,它仍然会尝试转换然后失败。
我基本上只是想要它,这样我就可以阻止最终用户编辑字符串并强制他们编辑单个属性,这样我就不必为每个类编写字符串解析器。
这是可能的,还是有另一种我没有想到的方法?
这似乎可以解决问题:
[TypeConverter(typeof (Color.ColorConverter))]
public struct Color
{
private readonly byte alpha, red, green, blue;
public Color(byte alpha, byte red, byte green, byte blue)
{
this.alpha = alpha;
this.red = red;
this.green = green;
this.blue = blue;
}
public byte Alpha { get { return alpha; } }
public byte Red { get { return red; } }
public byte Green { get { return green; } }
public byte Blue { get { return blue; } }
public override string ToString()
{
return string.Format("{{(R,G,B,A) = ({0},{1},{2},{3})}}", Red, Green, Blue, Alpha);
}
private class ColorConverter : ExpandableObjectConverter
{
public override bool GetCreateInstanceSupported(ITypeDescriptorContext context)
{
return true;
}
public override object CreateInstance(ITypeDescriptorContext context, IDictionary propertyValues)
{
return new Color((byte)propertyValues["Alpha"], (byte)propertyValues["Red"],
(byte) propertyValues["Green"], (byte) propertyValues["Blue"]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
899 次 |
| 最近记录: |