Introduction

PropertyGrid affiche les propriétés d'une instance d'une classe.

Une propriété, c'est avec get/set. Dans sa version minimaliste :

public string Prop { get; set; }

Personnaliser l'affichage d'un attribut

Les annotations ci-dessous doivent se mettre dans la partie la plus basse de la hiérarchie de l'héritage. Le mettre dans une interface ne sert à rien. Il faut les mettre dans la classe qui l'implémente. Ce commentaire n'est valable que pour le composant PropertyGrid. Dans le cas d'un DataGridView, c'est les annotations de la classe/interface la plus haute qui est prise en compte.

Afficher l'attribut

[Browsable(true)]

Rendre l'attribut non-éditable

[ReadOnly(true)]

Nom de la catégorie

[Category("Commun")]

Nom public de l'attribut

Ce nom s'affiche aussi en haut d'une colonne d'un DataGridView.

[DisplayName("Mon nom")]

Aide sur l'attribut

[Category("Description perso")]

Attribut de type fichier

Permettre l'édition du champ via un OpenFileDialog.

[Editor(typeof(OpenFileEditor), typeof(UITypeEditor))]
 
internal class OpenFileEditor : UITypeEditor
{
  private readonly OpenFileDialog ofd = new OpenFileDialog();
 
  public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
  {
    return UITypeEditorEditStyle.Modal;
  }
 
  public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
  {
    ofd.FileName = value.ToString();
    ofd.Filter = "Text File|*.txt|All Files|*.*";
    if (ofd.ShowDialog() == DialogResult.OK)
    {
      return ofd.FileName;
    }
    return base.EditValue(context, provider, value);
  }
}