Rafraichissement PropertyGrid du Designer (attribut RefreshProperties)
Pour ceux qui ne connaissent pas, voici comment faire pour déclencher le rafraichissement de la grille de propriété du Designer sur le changement de valeur d'une des propriétés.
Ceci est particulièrement utile quand le fait de changer la valeur d'une propriété affichée dans la fameuse grille pour notre composant déclenche le changement de valeur d'une autre propriété du composant, elle aussi affichée dans la grille.
Pour ceux qui ne verrais pas très bien ce dont je veux parler, prenez le projet d'exemple sur ce source sur CSharpFR.
Petit exemple :
Prenons un contrôle TextBox personnalisé, possédant une propriété TextBoxType permettant de choisir un type d'entrée.
Si on fait ceci, on observera que la mise à jour de l'affichage de cette dernière dans la grille ne sera pas effectuée en "temps réel" :
[Browsable(true), Category("Appearance")]public TextBoxTypes TextBoxType
{ get
{ return _type;
}
set
{ _type = value;
// changement du texte du TextBox
switch ( _type )
{ case TextBoxTypes.Number:
this.Text = "Veuillez saisir un nombre.";
break;
case TextBoxTypes.Text:
this.Text = "Veuillez saisir un texte.";
break;
}
}
}
Le changement de valeur met à jour la propriété Text.
Le rendu du contrôle sur la surface de design est bien effectué, cependant vous observerez que dans la grille le contenu de "Text" n'est pas actualisé. (si vous cliquez dans la zone de saise il le sera).

La "parade" consiste donc à utiliser l'attribut RefreshProperties qui pemettra de déclencher la mise à jour de la grille à chaque changement de valeur de la propriété TextBoxType :
[Browsable(true), Category("Appearance"), RefreshProperties(RefreshProperties.Repaint)]
public TextBoxTypes TextBoxType
{
...
}

Ce genre de choses peut être bon à savoir :-)
Liens utiles :
RefreshPropertiesAttribute
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :