1

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

我有一个 UITypeEditor 用于这些常见对象的“EffectiveDiameter”属性。它跟踪单位(米与英尺)并即时做一些好事。但是,当有人选择两个或三个公共对象时,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;
        }
    }
}

如果我选择了几个自定义对象——所有对象都具有相同的有效直径——我如何让 EffectiveDiameter 像 Anchor 一样显示在 PropertyGrid 中?现在,该字段始终为空白。

4

2 回答 2

2

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

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

于 2009-03-11T14:41:02.230 回答
1

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

于 2009-03-11T14:06:04.140 回答