English 中文(简体)
当选择多个项目时,如何显示自定义字符串?
原标题:
  • 时间:2009-03-11 14:00:38
  •  标签:

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

我在这些常见对象的“EffectiveDiameter”属性上有一个UITypeEditor。它会跟踪单位(米或英尺)并进行一些实时漂亮的操作。但是,当有人选择两个或三个普通对象时,EffectiveDiameter为空,即使它评估为相同的文本字符串。

例如,在大多数控件中,Microsoft有一个名为“Anchor”属性,其文本输出为“顶部,右侧”。当您将其下拉时,它是一个具有漂亮的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在PropertyGrid中像Anchor一样显示?目前,该字段总是空白的。

最佳回答

从您的描述中,似乎您正在谈论双倍类型的有效直径。但在您的示例中,您展示了一个用于umConversion类的UITypeEditor。因此,请澄清一下。

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

问题回答

在每个属性上都放置一个TypeConverter属性。





相关问题
热门标签