Ocultar mediante programación de Campo en PropertyGrid

Utilizando

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

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

Puedo cargar una instancia de esta clase con simplemente …

PropertyGrid1.SelectedObject = oColumn

Obviamente no quiero construir manualmente el propertygrid en el código, yo sé cómo hacer eso.

Pero aquí está el problema. Dependiendo del valor de una propiedad, algunas otras propiedades no debe ser visible, ya que a pesar de que yo había usado la

<System.ComponentModel.Browsable(False)> _

atributo en la declaración de propiedad.

Es de todos modos hay que hacerlo mediante programación, sin tener que manejar todo el edificio de la cuadrícula de propiedades manualmente>

InformationsquelleAutor hmcclungiii | 2009-03-09

4 Kommentare

  1. 1

    si usted estaba esperando para un gridItem.Hide() entonces, la respuesta es no. La única manera de lograr que en el MS PropertyGrid es publicar dinámicamente sus propiedades a través de la GetProperties de un TypeConverter o de tipo personalizado descriptor (que implementa ICustomTypeDescriptor). Me gustaría probar primero con el TypeConverter (especialmente si los valores de la propiedad que desea comprobar encuentran en el mismo nivel), hay menos de codificación de hacer.

  2. 15

    Realidad, esto es totalmente posible. La primera y más fácil es establecer la cuadrícula BrowsableAttributes propiedad:

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

    Este filtrará todas las propiedades que NO coinciden con el atributo-tipo de oferta. Desafortunadamente, este es un resultado positivo del filtro en lugar de un filtro negativa que la hace menos útil en mi humilde opinión.

    Segundo, e igual de fácil, usted puede crear un simple envoltorio alrededor del objeto que desea mostrar en el PropertyGrid y re-definir lo que las propiedades que desea ocultar/etc. como atravesar propiedades:

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

    Pop que en una cuadrícula de propiedad y la propiedad Enabled se oculta.

    Tercero, usted puede personalizar el PropertyGrid sí mismo y entrar en el mundo de tipo de descriptores y así sucesivamente, pero si todo lo que quiero hacer es ocultar un par de propiedades, esto es excesivo.

    Espero que esto ayude.

    • gran sugerencia con el BrowsableAttributes si no os importa el orden.
    • esta es exactamente la solución que estaba buscando. Un millón de gracias bro. Para ocultar la apariencia, usted necesita hacer: [Navegable(false)] [(Categoría de»Diseño»)] public nueva apariencia Apariencia { get { return base.Apariencia; } set { base.Apariencia = value; } }
  3. 0

    Como para el C++, aquí es una solución fácil para mostrar la categoría seleccionada en un propertyGrid.

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

    Esta se muestran sólo ‘Apariencia’ de la categoría en el propertyGrid y ocultar todas las demás categorías.
    Suponiendo que usted puede traducir el código en C# ti mismo.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea