Pergunta

Usando

<System.ComponentModel.TypeConverter(GetType(System.ComponentModel.ExpandableObjectConverter))> _

na declaração de uma classe (que é uma propriedade de outra classe), que consiste em propriedades numéricas.

eu carregar uma instância dessa classe com simplesmente ...

PropertyGrid1.SelectedObject = oColumn

Obviamente eu não quero construir manualmente o PropertyGrid em código, eu sei como fazer isso.

Mas aqui está o problema. Dependendo do valor de uma propriedade, algumas outras propriedades não devem ser visíveis, como se eu tivesse usado o

<System.ComponentModel.Browsable(False)> _

atributo na declaração de propriedade.

Existe uma maneira de fazer isso programaticamente, sem ter que lidar com todo o edifício da grade de propriedade manualmente>

Foi útil?

Solução

Se você estava esperando para uma gridItem.Hide (), em seguida, a resposta é não. A única maneira de conseguir isso no MS PropertyGrid é publicar dinamicamente suas propriedades através do método GetProperties de um descritor TypeConverter ou personalizado tipo (que implementa ICustomTypeDescriptor). Gostaria de tentar primeiro com o TypeConverter (especificamente se os valores de propriedade que pretende verificar estão no mesmo nível), há menos de codificação para fazer.

Outras dicas

Na verdade, isso é perfeitamente possível. O primeiro e mais fácil é para definir a propriedade BrowsableAttributes da grade:

propGraph.BrowsableAttributes = new AttributeCollection(
    new Attribute[] 
    { 
        new CategoryAttribute("Appearance")
    });

Este irá filtrar todas as propriedades que não coincidem com os atributos de tipos que você fornece. Infelizmente este é um filtro positivo, em vez de um filtro negativo que torna IMHO menos útil.

Em segundo lugar, e igualmente fácil, você pode criar um wrapper simples em volta do objeto que você deseja exibir no PropertyGrid e re-definir o que quer que propriedades deseja esconder / etc. como propriedades de passagem:

public class MyDerivedControl : public TextBox
{
    [Browsable(false)]
    [Category("MyCustomCategory")]
    public new bool Enabled
    {
         get { return base.Enabled }
         set { base.Enabled = value; }
    }
}

Pop que em uma grade de propriedade e a propriedade Enabled serão ocultados.

Em terceiro lugar, você pode personalizar o PropertyGrid-se e entrar no mundo dos descritores de tipo e assim por diante, mas se tudo que você quer fazer é esconder algumas propriedades, este é um exagero.

Espero que isso ajude.

Quanto ao C ++, aqui é uma solução fácil para mostrar categoria selecionada em uma propertyGrid.

cli::array<Attribute^,1>^ attrs = {gcnew CategoryAttribute("Appearance")};
this->PropertyGrid->BrowsableAttributes = gcnew AttributeCollection(attrs);
this->PropertyGrid->SelectedObject = this->SelectedControl;

Isto irá mostrar única categoria 'Appearance' na PropertyGrid e ocultar todas as outras categorias. Supondo que você pode traduzir o código em C # se.

Esta Pergunta é semelhante, mas as respostas são mais completo. Algumas pessoas podem querer referência cruzada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top