Comment puis-je supprimer les points de suspension pour un UITypeEditor personnalisé en lecture seule?

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

  •  03-07-2019
  •  | 
  •  

Question

J'ai deux champs de même type dans ma grille de propriétés. Cependant, l’un est en lecture seule, l’autre est éditable.

Ces deux champs sont d'un type personnalisé et ont donc un UITypeEditor personnalisé, qui place le bouton elipsis ([...]) sur le champ.

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

Dans cet exemple, FactoredAreaMod est disponible pour être édité, mais LES DEUX ont les élipsis, ce qui entraînera une grande confusion avec les utilisateurs. N'importe quel moyen de désactiver ça?

Était-ce utile?

La solution

Utilisez l'attribut ReadOnly . Ceci le marque comme étant au moment du design en lecture seule tout en le gardant en lecture / écriture pour une utilisation en cours d'exécution.

Vous devez également appliquer le éditeur attribuer au type plutôt qu'aux propriétés. L’application à une propriété ne présente aucun avantage si vous ne souhaitez pas que cette propriété soit modifiable.

Autres conseils

Grâce à Jeff Yates, j'ai proposé une autre solution. Voici comment j'ai résolu le problème ...

Le plus gros problème était que EditorAttribute était effectivement attribué à FactoredAreaClass. Je l’ai mis dans l’exemple brut pour montrer qu’un attribut d’éditeur avait été attribué.

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

Le truc consiste à ne pas utiliser le style Modal lorsque la propriété liée est en lecture seule. Heureusement pour nous, le contexte est fourni dans la méthode GetEditStyle. Un simple code fera l'affaire:

public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
  return context.PropertyDescriptor.IsReadOnly 
          ? UITypeEditorEditStyle.None 
          : UITypeEditorEditStyle.Modal;       
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top