Question

Utilisation

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

sur la déclaration d'une classe (propriété d'une autre classe) constituée d'un nombre de propriétés.

Je charge une instance de cette classe simplement avec ...

PropertyGrid1.SelectedObject = oColumn

Évidemment, je ne veux pas construire manuellement le propertygrid dans le code, je sais comment faire cela.

Mais voici le problème. En fonction de la valeur d'une propriété, certaines autres propriétés ne doivent pas être visibles, comme si j'avais utilisé le

<System.ComponentModel.Browsable(False)> _

attribut sur la déclaration de propriété.

Est-il possible de le faire par programme, sans avoir à gérer manuellement la construction de la grille de propriétés >

Était-ce utile?

La solution

si vous espériez un gridItem.Hide (), la réponse est non. Le seul moyen d'y parvenir dans MS PropertyGrid est de publier dynamiquement vos propriétés à l'aide de la méthode GetProperties d'un TypeConverter ou d'un descripteur de type personnalisé (qui implémente ICustomTypeDescriptor). J'essaierais d'abord avec le TypeConverter (spécialement si les valeurs de propriété que vous voulez vérifier sont au même niveau), il y a moins de codage à faire.

Autres conseils

En fait, cela est tout à fait possible. La première et la plus simple consiste à définir la propriété BrowsableAttributes de la grille:

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

Ceci filtrera toutes les propriétés qui ne correspondent PAS aux types d'attribut que vous fournissez. Malheureusement, il s’agit d’un filtre positif plutôt que d’un filtre négatif, ce qui le rend moins utile à mon humble avis.

Deuxièmement, et tout aussi simple, vous pouvez créer un simple wrapper autour de l’objet que vous souhaitez afficher dans le PropertyGrid et redéfinir les propriétés que vous souhaitez masquer / etc. comme propriétés de relais:

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

Ajoutez-le dans une grille de propriétés et la propriété Enabled sera masquée.

Troisièmement, vous pouvez personnaliser le PropertyGrid lui-même et entrer dans le monde des descripteurs de type, etc., mais si tout ce que vous voulez faire est de cacher quelques propriétés, c’est excessif.

J'espère que cela vous aidera.

Comme pour le C ++, voici une solution simple pour afficher la catégorie sélectionnée dans un propertyGrid .

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

Ceci affichera uniquement la catégorie 'Apparence' dans le propertyGrid et masquera toutes les autres catégories. En supposant que vous puissiez traduire le code en C # vous-même.

Cette question est similaire, mais les réponses sont les mêmes plus achevé. Certaines personnes peuvent souhaiter faire des renvois.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top