Wie entferne ich die Auslassungspunkte für eine benutzerdefinierte UITypeEditor, die schreibgeschützt ist?

StackOverflow https://stackoverflow.com/questions/616671

  •  03-07-2019
  •  | 
  •  

Frage

Ich habe zwei Felder, die in meinem Eigentum-Gitter des gleichen Typs sind. Jedoch ist ein schreibgeschützt, die andere bearbeitet werden können.

Diese beiden Felder sind mit einem benutzerdefinierten Typ, und somit eine benutzerdefinierte UITypeEditor hat, die die Elipsis setzen ([...]) auf dem Feld.

[
     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 { ... }

In diesem Beispiel ist FactoredAreaMod verfügbar bearbeitet werden, aber beide haben die Elipsis, die große Verwirrung bei den Nutzern führen wird. Jede Art und Weise zu drehen, dass aus ??

War es hilfreich?

Lösung

Mit dem Readonly-Attribute. Dies markiert sie als Entwurfszeit schreibgeschützt, während es für die Laufzeit durchlesen zu halten / schreiben.

Außerdem sollten Sie entweder gelten die Editor die Art, anstatt die Eigenschaften. Es gibt keinen Gewinn es auf eine Eigenschaft in der Anwendung, wenn Sie nicht diese Eigenschaft wollen editierbar sein.

Andere Tipps

Dank Jeff Yates, kam ich mit einer alternativen Lösung auf. Hier ist, wie ich es gelöst ...

Das größte Problem war, dass der Editor wurde in der FactoredAreaClass tatsächlich zugewiesen. Ich habe es im rohen Beispiel nur um zu zeigen, dass ein Editor Attribut zugewiesen war.

[
    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 { ... }

Der Trick ist, nicht den Modal-Stil zu verwenden, wenn die beschränkte Eigenschaft nur lesbar ist. Zum Glück für uns, ist der Kontext, in dem GetEditStyle Verfahren zur Verfügung gestellt. Ein einfacher Code wird die Arbeit tun:

public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
  return context.PropertyDescriptor.IsReadOnly 
          ? UITypeEditorEditStyle.None 
          : UITypeEditorEditStyle.Modal;       
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top