Filtrer dynamiquement les propriétés affichées
using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
/// <summary>
/// Code exemple illustrant comment fitrer les propriétés affichées dans la grille
/// de propriétés en utilisant un identifiant.
/// </summary>
public Form1()
{
InitializeComponent();
propertyGrid.SelectedObject = new Proprietes();
//Cacher les propriétés non utilisées
//Calculer la valeur de l'identifiant à afficher en réalisant
//l'opération de bits OR sur les opérandes
//On affiche ici uniquement les propriétes "ProprieteUne" et "ProprieteTrois" : 0x1 | 0x4 = 0x5
propertyGrid.BrowsableAttributes =
new AttributeCollection(new CleAttribut(ClePropriete.ProprieteUne | ClePropriete.ProprieteTrois));
//La surcharge de la méthode de comparaison de la classe Cle permet
//d'afficher les propriétés spécifiés par leur identifiant
}
}
/// <summary>
/// Classe décrivant les propriétés à afficher dans la grille de propriétés.
/// </summary>
public class Proprietes
{
[CleAttribut(ClePropriete.ProprieteUne)]
public int ProprieteUne
{
get { return 1; }
set { }
}
[CleAttribut(ClePropriete.ProprieteDeux)]
public int ProprieteDeux
{
get { return 2; }
set { }
}
[CleAttribut(ClePropriete.ProprieteTrois)]
public int ProprieteTrois
{
get { return 3; }
set { }
}
}
/// <summary>
/// Identifiant des propriétes affichées dans le panneau de propriétés.
/// </summary>
public enum ClePropriete
{
ProprieteUne = 0x1,
ProprieteDeux = 0x2,
ProprieteTrois = 0x4
}
/// <summary>
/// Classe définissant l'identifiant d'une propriété.
/// </summary>
[AttributeUsage(AttributeTargets.Property)]
public class CleAttribut : Attribute
{
private ClePropriete clePropriete;
public CleAttribut(ClePropriete clePropriete)
{
this.clePropriete = clePropriete;
}
public override bool Match(object obj)
{
// Surcharge de la méthode de comparaison de l'attribut afin de supporter les comparaisons
//bits à bits.
return ((CleAttribut)obj).clePropriete == (((CleAttribut)obj).clePropriete & this.clePropriete);
}
}
}