1

我的属性网格中有两个相同类型的字段。但是,一个是只读的,另一个是可编辑的。

这两个字段都是自定义类型,因此有一个自定义 UITypeEditor,它将省略号 ([...]) 按钮放在字段上。

[
     CategoryAttribute("5 - Wind"),
     DisplayName("Factored Area"),
     Description("The factored area for the segment."),
     EditorAttribute(typeof(umConversionTypeEditor), typeof(UITypeEditor)),
     TypeConverter(typeof(umConversionTypeConverter)),
     ReadOnly(true)
]
public FactoredAreaClass FactoredArea { ... }

[
     CategoryAttribute("5 - Wind"),
     DisplayName("Factored Area Modifier"),
     Description("The factored area modifier."),
     EditorAttribute(typeof(umConversionTypeEditor), typeof(UITypeEditor)),
     TypeConverter(typeof(umConversionTypeConverter))
]
public FactoredAreaClass FactoredAreaMod { ... }

在这个例子中,FactoredAreaMod 是可以编辑的,但是 BOTH 都有省略号,这会给用户造成很大的混乱。有什么办法关掉吗??

4

3 回答 3

1

使用ReadOnly属性。这将其标记为设计时只读,同时保持其读/写以供运行时使用。

此外,您应该将Editor属性应用于类型而不是属性。如果您不希望该属性可编辑,则将其应用于属性没有任何好处。

于 2009-03-05T21:24:35.273 回答
1

感谢 Jeff Yates,我想出了一个替代解决方案。这是我解决它的方法...

最大的问题是 EditorAttribute 实际上是在 FactoredAreaClass 中分配的。我把它放在原始示例中只是为了表明分配了一个编辑器属性。

[
    CategoryAttribute("5 - Wind"),
    DisplayName("Factored Area"),
    Description("The factored area for the segment."),
    EditorAttribute(typeof(UITypeEditor), typeof(UITypeEditor)), // RESET THE UITYPEEDITOR to "nothing"
    ReadOnly(true)
]
public FactoredAreaClass FactoredArea { ... }

[
    CategoryAttribute("5 - Wind"),
    DisplayName("Factored Area Modifier"),
    Description("The factored area modifier."),
    // the EditorAttribute and TypeConverter are part of FactoredAreaClass
]
public FactoredAreaClass FactoredAreaMod { ... }
于 2009-03-05T21:55:03.283 回答
0

当有界属性为只读时,诀窍是不要使用 Modal 样式。幸运的是,在 GetEditStyle 方法中提供了上下文。一个简单的代码就可以完成这项工作:

public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
  return context.PropertyDescriptor.IsReadOnly 
          ? UITypeEditorEditStyle.None 
          : UITypeEditorEditStyle.Modal;       
}
于 2014-01-16T23:25:36.983 回答