Como faço para remover as reticências para um UITypeEditor personalizado que é somente leitura?

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

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu tenho dois campos que são do mesmo tipo em minha propriedade da rede. No entanto, um é somente leitura, o outro é editável.

Ambos os campos são de um tipo personalizado, e, assim, ter um UITypeEditor costume, o que coloca o botão ([...]) elipsis no 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 { ... }

Neste exemplo, FactoredAreaMod está disponível para ser editado, mas ambos têm o elipsis, o que causará uma grande confusão com os usuários. Qualquer maneira de desligar isso ??

Foi útil?

Solução

atributo Use a ReadOnly . Esta marca como tempo de design somente leitura, mantendo-o de leitura / gravação para o uso de tempo de execução.

Além disso, você deverá aplicar o editor atributo para o tipo, em vez das propriedades. Não há nenhum ganho em aplicá-la a uma propriedade, se você não quer que a propriedade para ser editável.

Outras dicas

Graças a Jeff Yates, eu vim com uma solução alternativa. Aqui está como eu resolvido ...

O maior problema foi que o EditorAttribute realmente foi atribuído no FactoredAreaClass. Eu colocá-lo no exemplo cru só para mostrar que não havia um atributo editor atribuído.

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

O truque é não usar o estilo Modal quando a propriedade limitada é somente leitura. Felizmente para nós, o contexto é fornecido no método GetEditStyle. Um simples código irá fazer o trabalho:

public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
  return context.PropertyDescriptor.IsReadOnly 
          ? UITypeEditorEditStyle.None 
          : UITypeEditorEditStyle.Modal;       
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top