EXEMPLE DE PROPRIÉTÉ D'OBJET AVEC UN PETIT PLUS DANS LA FENETRE PROPRIETE (STYLE

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 - 3 sept. 2004 à 19:19
cs_Kelpan Messages postés 70 Date d'inscription mercredi 24 avril 2002 Statut Membre Dernière intervention 17 septembre 2006 - 30 juin 2008 à 14:26
cs_Kelpan Messages postés 70 Date d'inscription mercredi 24 avril 2002 Statut Membre Dernière intervention 17 septembre 2006
30 juin 2008 à 14:26
J'ai résolu mon souci.
En fait, j'ai trouvé une astuce avec la méthode Clone (Implementation de ICloneable) qui est appelé au moment du design.
Plus de précision sur le source converti en VB (car je suis VBiste) par JESUSONLINE :
http://www.vbfrance.com/code.aspx?ID=25937
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
30 juin 2008 à 08:50
@Kelpan : non je ne vois malheureusement pas ou se situe ton souci :/
cs_Kelpan Messages postés 70 Date d'inscription mercredi 24 avril 2002 Statut Membre Dernière intervention 17 septembre 2006
29 juin 2008 à 23:10
Pour répondre à Mahrak

Il existe des méthodes pour définir la serialisation des propriétés objets que j'utilise souvent

Tu as les méthodes (Property étant le nom de ta propriété) :
bool ShouldSerialize(Property) : Renvoi True si il faut serialiser
void Reset(Property) : reinitialiser la proppriété

Tu peux consulter MSDN : PropertyDescriptor, tu y trouvera les infos
cs_Kelpan Messages postés 70 Date d'inscription mercredi 24 avril 2002 Statut Membre Dernière intervention 17 septembre 2006
29 juin 2008 à 23:03
Bonjour,
Je suis tombé sur ce source, et j'aurais bien voulu le trouvé avant car cela fait une semaine que je galère à faire ce genre de propriété.
Finalement, j'en suis arrivé au même point...

Par contre, moi j'ai un souci.
J'ai un control personnalisé qui hérite de Button.
Sur mon écran lorsque que je modifie la propriété de mon Button personnalisé je n'ai pas de problème, la serialisation s'effectue correctement.
Par contre, et c'est ici que j'ai le problème, c'est que lorsque j'herite de mon écran, la propriété que j'ai modifié et affiché en gras (ce qui n'est pas le comportement standard par rapport au comportement habituel du propertyGrid) et je ne peux pas serialiser la propriété si la valeur revient à celle par défaut.

Quelqu'un à le meme problème ou jai oublié quelque chose ?
TigerFab Messages postés 115 Date d'inscription samedi 15 février 2003 Statut Membre Dernière intervention 18 mai 2008
7 déc. 2007 à 12:29
Voilà j'ai finalement trouvé un moyen pour rafraichir directement ses composants dès qu'on change une propriété dans le designer.

Il faut ajouter à la classe un évènement que vous appelerez dans chaque propriété.

Exemple :

- Définissez dans la classe Mon_ensemble_de_propriete() :
public Event Set_Mon_ensemble_de_propriete()

- Pour chaque propriété (nom, prénom, ..) de la classe, faites
RaiseEvent Set_Mon_ensemble_de_propriete()
dans chaque Set

- Et voilà, plus qu'à définir votre procédure événementielle dans votre objet :
public sub SetArthenius() Handles Arthenius.Set_Mon_ensemble_de_propriete()

Chaque changement de propriété appelera votre fonction personalisée SetArthenius.
TigerFab Messages postés 115 Date d'inscription samedi 15 février 2003 Statut Membre Dernière intervention 18 mai 2008
3 déc. 2007 à 21:11
Petite remarque tout de même, on sait modifier les propriétés dans en mode design, elles sont effectivement retenues avec DesignerSerializationVisibility. Mais elle ne s'applique pas dans l'interface. D'ailleurs mettez un msgbox "Test" dans

set
{
Arthenius=value;
msgbox "ok"
}

en changeant dans le designer cela ne passe jamais par le set.
Etrange et pourtant ....

Si qcq a une idée ..
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
30 nov. 2007 à 08:42
@Tigerfab :

merci ;)
j'ai pas mal chercher aussi à l'époque :)

@MAhrak :
tu peux toujours definir une valeur par défaut dans ta classe, après je ne sais pas s'il apparaitra en gras ou pas ^^
TigerFab Messages postés 115 Date d'inscription samedi 15 février 2003 Statut Membre Dernière intervention 18 mai 2008
29 nov. 2007 à 18:48
Bonjour,

Bravo pour ce code. Exactement ce que je recherchais. Je demande bien comment tu as pu trouver l'astuce, cela fait des jours que je parcourais le web ...

Pour ceux qui ont des plantages de Visual Studio quand il affiche leur composant en mode design, c'est en effet parce que la classe ..._Converter ne servait à rien. Implémenter le type ExpandableObjectConverter et là plus de plantage :-)
--> [TypeConverter(typeof(ExpandableObjectConverter))]
Mahrak Messages postés 2 Date d'inscription dimanche 20 août 2006 Statut Membre Dernière intervention 20 septembre 2007
19 sept. 2007 à 19:38
Excellent ! Exactement ce que je cherchais a faire depuis un petit moment.

Même si je vois que personne n'a de réponse au problème de Thorfen (tout du moins tel que je comprend la question), j'ai une autre question :

Comment définir une valeur par défaut sur des objets tel que les Font, Color etc. pour plus qu'ils n'apparaissent en gras tant qu'il n'ont pas été modifier ? C'est facile a faire sur les types standards (string, bool, int et autres valeurs numériques) en ajoutant un [DefaultValue(valeur)]. Ca l'est beaucoup moins pour les objets.
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
18 août 2006 à 11:10
en attaquant la classe contenu dans la propriété simplement....


genre Mon_Objet.Mais_qui_est_Arthenius.Nom = "TOTO";
Mon_Objet.Mais_qui_est_Arthenius.Prenom = "TUTU";

me semble t il
thorfen Messages postés 5 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 14 mai 2007
18 août 2006 à 10:22
Très intéréssant comme source en plus j'ai bien compris le
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
du coup qui est quand meme super important

au passage c'est du détail mais vous savez comment faire pour modifier la valeur de ce qui apparait en face de la propriété extendable ?
car on modifie les valeurs sous cette propriété mais pas la valeur de l'objet
par exemple pour la propriété font tu voix la font family le style et la taille

merci encore pour le code !
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
14 mars 2005 à 18:46
UInt32 n'est pas conforme CLS, ce qui pourrait poser problème dans certains langages .Net
Tu devrais te rabattre sur du Int64 je pense.
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
14 mars 2005 à 16:34
non désolé...
Trentreznor Messages postés 7 Date d'inscription mardi 10 août 2004 Statut Membre Dernière intervention 14 mars 2005
14 mars 2005 à 16:14
Merci pour cette source qui m'a aidé à simplifier mon code, par contre j'ai un problème sachant que les propriétés de mon objet type "Mon_ensemble_de_propriete" sont des uint (= System.UInt32) et l'interface refuse de générer du code pour ce type de propriétés. J'ai essayé de regarder du coté des TypeConverter et autres InstanceDescriptor mais je ne suis arrivé à rien.
Quelqun aurait il une solution?
Frederyck Messages postés 62 Date d'inscription vendredi 6 décembre 2002 Statut Membre Dernière intervention 16 janvier 2009 1
24 sept. 2004 à 10:48
ok, ben c cool alors, il me semble que j'avais testé come caet que ca n'avait pas marché, mais j'avais du faire une erreur quelque part, donc je retesterai

Ok merci ;)
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
24 sept. 2004 à 10:00
oui si tu suis l'exemple de propriété donné dans le source... :

private Mon_ensemble_de_propriete Arthenius =new Mon_ensemble_de_propriete();
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public Mon_ensemble_de_propriete Mais_qui_est_Arthenius
{
get
{

return Arthenius;
}
set
{
Arthenius=value;
}
}

il faut faire le new....sinon le plus n'apparait pas....
et le [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
est obligatoire pourqu'il tienne compte de ce que tu saisis...

voir les commentaires et les mises a jour...

et oui apres ca tu peux utiliser tes classes pour tes objets....
c'est du plus belle effet dans ta fenetre propriété :o))))
Frederyck Messages postés 62 Date d'inscription vendredi 6 décembre 2002 Statut Membre Dernière intervention 16 janvier 2009 1
24 sept. 2004 à 09:50
Cool content d'avoir pu aidé.
Mais dis moi dans la classe où tu utilises ta classe Mon_ensemble_de_propriete, c'est un control ?
Quand la propriété s'affiche dans le designer Visual Studio est ce que tu arrives à modifier les propriétés nom et Prénom ? et est ce que les modifications sont reportées aussitôt dans le designer.
Je m'explique en admettant que la classe où tu utilises Mon_ensemble_de_propriete soit un control composite et que dans ce control tu affiches 2 labels où tu affiches Nom et Prénom. Est ce que lorsque tu modifies le nom et l eprénom, le designer met à jour la valeur et rend les nouvelles données insérées ?
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
24 sept. 2004 à 09:44
voila c a jour....

c plus simple...donc mieux :o)))

merci...
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
24 sept. 2004 à 09:05
je teste ca :o)))
ben en tout cas ca serait bien plus simple... :o)))
Frederyck Messages postés 62 Date d'inscription vendredi 6 décembre 2002 Statut Membre Dernière intervention 16 janvier 2009 1
23 sept. 2004 à 20:12
Salut, ben tout d'abord effectivement pour faire apparître le petit plus, il n'est pas necessaire de créer une classe qui dérive de ExpandableObjectConverter
il suffit juste de faire
[TypeConverter(typeof(ExpandableObjectConverter
))].
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
6 sept. 2004 à 22:59
source updated : ---> http://www.vbfrance.com/code.aspx?ID=25937


Cyril
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
6 sept. 2004 à 18:05
encore un pb de refresh ;o)))
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
6 sept. 2004 à 18:04
lol...

mouis mais ca vaut le coup....

ca marche vachement mieux....
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
6 sept. 2004 à 18:02
o_O
je me demande où est passé mon comment de tout à l'heure
enfin bref il disais :
"lol
je ne savais pas le reste"
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
6 sept. 2004 à 17:58
pffffff c pas cool va falloir que je mette à jour ma source en VB .net :D

Cyril
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
6 sept. 2004 à 14:42
coq tu m'enerve...

:o)))

c ca...

ben ca a failli....

j'ai failli t'apprendre un truc....


:o))))))))))
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
6 sept. 2004 à 14:36
lol, ça :

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public Mon_ensemble_de_propriete Mais_qui_est_Arthenius
{
get
{

return Arthenius;
}
set
{
Arthenius=value;
}
}
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
6 sept. 2004 à 14:22
et en francais ???

:o)))))))))
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
6 sept. 2004 à 14:12
euh
il me semble qu'il faut que tu regardes du côté de DesignerSerializer et/ou DesignerSerializerVisibility
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
6 sept. 2004 à 14:00
Bon il semble qu'il y ai un petit souci...
en fait quand en design on saisie directement les propriétés, on arrive pas à les récupérer en code...
Null object reference...
par contre si dans le code tu assigne ces propriétés...
ben ca fonctionne...
donc il doit manquer kkchose kkpart...

je cherche et je mettrais à jour ...si je trouve...
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
6 sept. 2004 à 09:08
lol
chuuuuuuut ;)
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
6 sept. 2004 à 08:56
ben perso j'aurai aussi preferer que ce soit moins lourd... :o)))

Jesusonline a poster un source faisant la meme chose en vb : http://www.vbfrance.com/code.aspx?ID=25937

pour ce qui est de deatil sur les objet converter....
ben forcement vu que j'ai betement traduit....

:o)))))

connait pas...

sorry...

mais bon sur le principe tout ce joue dans la fonction convertTo...
c'est la que tu appel le constructeur de ta classe...

pour une fois que j'ai trouver kkchose que coq ne connaissait pas :o))))
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
5 sept. 2004 à 10:22
moi aussi je pensais que c'était moins lourd que ça

Enfin c'est bon à savoir :)
Merci
sibi12 Messages postés 337 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 15 avril 2006
4 sept. 2004 à 11:06
Interessant...
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
3 sept. 2004 à 19:19
J'aurais pensé que c'etait plus facile que ca qd meme, fallait le savoir celui ci : Mon_ensemble_de_propriete_Converter, t'aurais pas un peu de détails sur ExpandableObjectConverter ? car j'ai pas compris à quoi sert tout ces membres surchargés.

En tout cas beau boulot. (8/10)

Merci :)

@+