Rafraichissement propertygrid du designer (attribut refreshproperties)

Soyez le premier à donner votre avis sur cette source.

Vue 12 339 fois - Téléchargée 339 fois

Description

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 zip, ouvrez le Form1 dans le designer et faites le test en changeant "TextBoxType" sur les 2 "TextBox" :-)

Source / Exemple :


/*
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 { ... }

Conclusion :


Pour une version plus "graphique" : http://blogs.developpeur.org/coq/archive/2005/06/25/8677.aspx

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
18
Date d'inscription
mercredi 13 août 2003
Statut
Membre
Dernière intervention
4 janvier 2007

Voici une source ou j'utilise un autre moyen pour modifier la propriété sous visual studio. voici le lien vers le projet.
http://www.csharpfr.com/codes/ANCRAGE-FENETRE_40970.aspx
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
84
lol
De rien, ce fut avec plaisir :-)
Messages postés
18
Date d'inscription
mercredi 13 août 2003
Statut
Membre
Dernière intervention
4 janvier 2007

Je m'incline devant ton savoir ;-). En quelques lignes tu m'as donné la solution et appris le "as ..." que je ne connaissais pas. C'est avec des gens comme toi que l'on avance. Merci encore.
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
84
Ah ok dit comme ça je vois ce que tu veux faire :-)
Tu dois te servir de la méthode RaiseComponentChanged (http://msdn2.microsoft.com/fr-fr/library/system.componentmodel.design.componentdesigner.raisecomponentchanged(VS.80).aspx)


Par exemple, dans le cadre de l'exemple cité ça donnerais ce genre de chose :
J'ai ajouter une propriété Time de type string à ExampleComponent et modifier la méthode onVerb du designer personnalisé :

// Event handling method for the example designer verb
private void onVerb(object sender, EventArgs e)
{
string newValue = DateTime.Now.ToLongTimeString();
ExampleComponent component = base.Component as ExampleComponent;
if (component != null)
{
// notification de changement
MemberDescriptor timeDescriptor = TypeDescriptor.GetProperties(component)["Time"];
this.RaiseComponentChanged(timeDescriptor, component.Time, newValue);
}

component.Time = newValue;
}
Messages postés
18
Date d'inscription
mercredi 13 août 2003
Statut
Membre
Dernière intervention
4 janvier 2007

Je suis désolé je m'explique très mal.En faite c'est un code que j'ai trouvé sur msdn voici le lien (http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/cpref/html/frlrfsystemcomponentmodeldesigncomponentdesignerclasstopic.asp), et j'aimerai modifier une valeur de mon composant à la place des messagebox par exemple, et le faire apparaittre dans la grille. Je vais continuer à chercher... ;-)
Afficher les 9 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.