我有一个属性网格,可以帮助我管理表单上的所有控件。这些控件适用于设计人员类型的人员,因此我并不担心用户界面......直到有人选择多个对象。
我在这些常见对象上有“EffectiveDiameter”属性的UITypeEditor。它跟踪单位(米与英尺),并在飞行中做一些好事。但是,当有人选择两个或三个公共对象时,EffectiveDiameter为空,即使它评估为相同的文本字符串。
例如,在大多数控件中,Microsoft具有“Anchor”属性,其文本输出为“Top,Right”。当你把它拉下来时,它是一个带有漂亮的UITypeEditor的对象。但是,当您在表单上选择五个具有相同Anchor设置的对象时,您仍然可以在属性网格中看到字符串“Top,Right”。
/// <summary>
/// The default containing class for all Unit-Management Conversion classes.
/// </summary>
[
Serializable,
EditorAttribute(typeof(umConversionTypeEditor), typeof(UITypeEditor)),
TypeConverter(typeof(umConversionTypeConverter)),
]
public class umConversion
{
...
}
public class umConversionTypeEditor : UITypeEditor
{
...
}
// Now, in my designer class, I have ...
private double _effectiveDiameter { get; set; }
[DisplayName("Effective Diameter")]
public virtual umConversion EffectiveDiameter
{
get
{
umConversion ret = new umConversion (_effectiveDiameter);
ret.MeasureInSI = _si;
return ret;
}
set
{
_effectiveDiameter = value.ImperialUnits;
}
}
}
/// <summary>
/// The default containing class for all Unit-Management Conversion classes.
/// </summary>
[
Serializable,
EditorAttribute(typeof(umConversionTypeEditor), typeof(UITypeEditor)),
TypeConverter(typeof(umConversionTypeConverter)),
]
public class umConversion
{
...
}
public class umConversionTypeEditor : UITypeEditor
{
...
}
// Now, in my designer class, I have ...
private double _effectiveDiameter { get; set; }
[DisplayName("Effective Diameter")]
public virtual umConversion EffectiveDiameter
{
get
{
umConversion ret = new umConversion (_effectiveDiameter);
ret.MeasureInSI = _si;
return ret;
}
set
{
_effectiveDiameter = value.ImperialUnits;
}
}
}
如果我选择了几个自定义对象 - 所有自定义对象都具有相同的有效直径 - 如何让Anchor中的EffectiveDia显示在PropertyGrid中?现在,该字段始终为空白。
答案 0 :(得分:1)
在每个属性上也放置一个TypeConverter
属性..
答案 1 :(得分:1)
根据你的描述,你似乎在谈论double类型的有效直径。但是在您的示例中,您正在为umConversion类显示UITypeEditor。所以,请澄清。
如果您处于第二种情况,您的属性实际上是您自己的类而不是基本类型,那么请确保实现Equals方法。 MS PropertyGrid中的MultiPropertyDescriptorGridEntry类调用Equals以了解所有目标实例是否具有相同的值。不确定这是不是你的问题,但我会测试一下,以消除这种可能性。