选择多个项目时如何显示自定义字符串?

时间:2009-03-11 14:00:39

标签: c# winforms propertygrid

我有一个属性网格,可以帮助我管理表单上的所有控件。这些控件适用于设计人员类型的人员,因此我并不担心用户界面......直到有人选择多个对象。

我在这些常见对象上有“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中?现在,该字段始终为空白。

2 个答案:

答案 0 :(得分:1)

在每个属性上也放置一个TypeConverter属性..

答案 1 :(得分:1)

根据你的描述,你似乎在谈论double类型的有效直径。但是在您的示例中,您正在为umConversion类显示UITypeEditor。所以,请澄清。

如果您处于第二种情况,您的属性实际上是您自己的类而不是基本类型,那么请确保实现Equals方法。 MS PropertyGrid中的MultiPropertyDescriptorGridEntry类调用Equals以了解所有目标实例是否具有相同的值。不确定这是不是你的问题,但我会测试一下,以消除这种可能性。