Come rimuovo i puntini di sospensione per un UITypeEditor personalizzato di sola lettura?

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

  •  03-07-2019
  •  | 
  •  

Domanda

Ho due campi dello stesso tipo nella mia griglia di proprietà. Tuttavia, uno è di sola lettura, l'altro è modificabile.

Entrambi questi campi sono di tipo personalizzato e quindi hanno un UITypeEditor personalizzato, che mette il pulsante elipsis ([...]) sul campo.

[
     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 questo esempio, FactoredAreaMod è disponibile per la modifica, ma ENTRAMBE hanno i puntini di sospensione, che causeranno grande confusione con gli utenti. Un modo per disattivarlo ??

È stato utile?

Soluzione

Utilizza l'attributo ReadOnly . Questo lo contrassegna come in fase di progettazione in sola lettura, mantenendolo in lettura / scrittura per l'uso in fase di esecuzione.

Inoltre, dovresti applicare Editor attributo al tipo piuttosto che alle proprietà. Non è utile applicarlo a una proprietà se non si desidera che tale proprietà sia modificabile.

Altri suggerimenti

Grazie a Jeff Yates, ho trovato una soluzione alternativa. Ecco come l'ho risolto ...

Il problema maggiore era che l'EditorAttribute era effettivamente assegnato in FactoredAreaClass. L'ho messo nell'esempio grezzo solo per mostrare che era stato assegnato un attributo dell'editor.

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

Il trucco non è usare lo stile modale quando la proprietà limitata è di sola lettura. Fortunatamente per noi, il contesto è fornito nel metodo GetEditStyle. Un semplice codice farà il lavoro:

public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
  return context.PropertyDescriptor.IsReadOnly 
          ? UITypeEditorEditStyle.None 
          : UITypeEditorEditStyle.Modal;       
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top