Pregunta

Utilizando

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

en la declaración de una clase (que es una propiedad de otra clase) que consta de un número de propiedades.

Carga una instancia de esta clase con simplemente ...

PropertyGrid1.SelectedObject = oColumn

Obviamente no quiero construir manualmente el PropertyGrid en código, sé cómo hacerlo.

Pero aquí está el problema. Dependiendo del valor de una propiedad, ciertas otras propiedades no deberían ser visibles, como si hubiera usado el

<System.ComponentModel.Browsable(False)> _

atributo en la declaración de propiedad.

¿Hay alguna manera de hacer esto mediante programación, sin tener que manejar manualmente toda la construcción de la cuadrícula de propiedades >

¿Fue útil?

Solución

si esperaba un gridItem.Hide () entonces, la respuesta es no. La única forma de lograr eso en MS PropertyGrid es publicar dinámicamente sus propiedades a través del método GetProperties de un TypeConverter o un descriptor de tipo personalizado (que implementa ICustomTypeDescriptor). Primero intentaría con TypeConverter (especialmente si los valores de propiedad que desea verificar están en el mismo nivel), hay menos codificación que hacer.

Otros consejos

En realidad, esto es completamente posible. La primera y más fácil es establecer la propiedad BrowsableAttributes de la cuadrícula:

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

Esto filtrará todas las propiedades que NO coincidan con los tipos de atributos que usted proporciona. Desafortunadamente, este es un filtro positivo en lugar de un filtro negativo, lo que lo hace menos útil en mi humilde opinión.

Segundo, e igualmente fácil, puede crear un contenedor simple alrededor del objeto que desea mostrar en PropertyGrid y redefinir las propiedades que desea ocultar / etc. como propiedades de paso:

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

Ingrese eso en una cuadrícula de propiedades y la propiedad Activada se ocultará.

En tercer lugar, puede personalizar el PropertyGrid en sí mismo y entrar en el mundo de los descriptores de tipo, etc., pero si todo lo que quiere hacer es ocultar un par de propiedades, esto es excesivo.

Espero que esto ayude.

En cuanto a C ++, aquí hay una solución fácil para mostrar la categoría seleccionada en una propertyGrid .

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

Esto mostrará solo la categoría 'Apariencia' en el PropertyGrid y ocultará todas las demás categorías. Asumiendo que puede traducir el código en C # usted mismo.

Esta pregunta es similar, pero las respuestas son similares más completo. Algunas personas pueden desear cruzar referencias.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top