¿Cómo elimino los puntos suspensivos de un UITypeEditor personalizado que es de solo lectura?

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

  •  03-07-2019
  •  | 
  •  

Pregunta

Tengo dos campos del mismo tipo en mi cuadrícula de propiedades. Sin embargo, uno es de solo lectura, el otro es editable.

Ambos campos son de un tipo personalizado y, por lo tanto, tienen un UITypeEditor personalizado, que coloca el botón elipsis ([...]) en el 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 { ... }

En este ejemplo, FactoredAreaMod está disponible para ser editado, pero AMBOS tienen elipsis, lo que causará una gran confusión con los usuarios. ¿Alguna forma de apagarlo?

¿Fue útil?

Solución

Use el atributo ReadOnly . Esto lo marca como tiempo de diseño de solo lectura, mientras que lo mantiene de lectura / escritura para uso en tiempo de ejecución.

Además, debe aplicar el Editor atribuir al tipo en lugar de las propiedades. No se gana nada al aplicarlo a una propiedad si no desea que esa propiedad sea editable.

Otros consejos

Gracias a Jeff Yates, se me ocurrió una solución alternativa. Así es como lo resolví ...

El mayor problema fue que el EditorAttribute en realidad se asignó en FactoredAreaClass. Lo puse en el ejemplo sin formato para mostrar que había un atributo de editor asignado.

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

El truco es no usar el estilo modal cuando la propiedad delimitada es de solo lectura. Afortunadamente para nosotros, el contexto se proporciona en el método GetEditStyle. Un simple código hará el trabajo:

public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
  return context.PropertyDescriptor.IsReadOnly 
          ? UITypeEditorEditStyle.None 
          : UITypeEditorEditStyle.Modal;       
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top