begin process at 2010 02 10 03:26:03
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > EXEMPLE DE PROPRIÉTÉ D'OBJET AVEC UN PETIT PLUS DANS LA FENETRE PROPRIETE (STYLE CE QUE L'ON TROUVE DEVANT LA PROPRIETE FONT DE L'OBJET TEXTBOX)

EXEMPLE DE PROPRIÉTÉ D'OBJET AVEC UN PETIT PLUS DANS LA FENETRE PROPRIETE (STYLE CE QUE L'ON TROUVE DEVANT LA PROPRIETE FONT DE L'OBJET TEXTBOX)


 Information sur la source

Note :
7,83 / 10 - par 6 personnes
7,83 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Astuces Source .NET ( DotNet ) Classé sous :propriété, fenetre Niveau :Débutant Date de création :03/09/2004 Date de mise à jour :24/09/2004 09:42:36 Vu :9 052

Auteur : Arthenius

Ecrire un message privé
Site perso
Commentaire sur cette source (35)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Voila je cherchais un moyen d'afficher une propriete qui regroupe plusieurs valeurs, par exemple dans un Textbox vous avez une propriete font qui regroupe la taille de la font, le nom etc....

voici un code qui permet de faire ca avec ces propres objets...

Source

  • //VOICI LA CLASSE QUI DOIT DEFINIR MES PROPRIETES DEVANT APPARAITRE DANS LA FENETRE PROPRIETE AVEC LE PETIT PLUS...
  • [TypeConverter(typeof(ExpandableObjectConverter))]
  • public class Mon_ensemble_de_propriete
  • {
  • private string _Nom;
  • private string _Prenom;
  • public Mon_ensemble_de_propriete()
  • {
  • }
  • public string Nom
  • {
  • get
  • {
  • return _Nom;
  • }
  • set
  • {
  • _Nom=value;
  • }
  • }
  • public string Prenom
  • {
  • get
  • {
  • return _Prenom;
  • }
  • set
  • {
  • _Prenom=value;
  • }
  • }
  • }
  • //AU FINAL DANS MON OBJET J'AURAI UNE PROPRIETE DEFINIT COMME CA :
  • 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;
  • }
  • }
//VOICI LA CLASSE QUI DOIT DEFINIR MES PROPRIETES DEVANT APPARAITRE DANS LA FENETRE PROPRIETE AVEC LE PETIT PLUS...
[TypeConverter(typeof(ExpandableObjectConverter))]
	public class Mon_ensemble_de_propriete
	{
		private string _Nom;
		private string _Prenom;

		public Mon_ensemble_de_propriete()
		{
		}

		public string Nom
		{
			get
			{
				return _Nom;

			}
			set
			{
				_Nom=value;
			}
		}
		public string Prenom
		{
			get
			{
				return _Prenom;

			}
			set
			{
				_Prenom=value;
			}
		}
	}

//AU FINAL DANS MON OBJET J'AURAI UNE PROPRIETE DEFINIT COMME CA :

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;
			}
		}

 Conclusion

Voila...maintenant vous aussi vous pourrez faire des propriétés "groupés" ca evitera a tout le monde de scroller pendant trois heures la fenetre des propriétés des objets...

Merci a Richard Clark : " Au coeur de visual Basic .net"  (http://www.c2i.fr/press/coeurvbnet.aspx)
qui as mis a disposition ces sources en VB que j'ai traduis en C#
merci a coq, crazyht, jesusonline pour leur aide...

Si vous avez des Interrogations des appréciations n'hesitez pas...POSTER :o)))
@+



 Historique

06 septembre 2004 14:48:34 :
Bon une petite mise à jour s'imposait : en fait quand on modifiait directement dans la fenetre propriete les zones...impossible de les utiliser en code... en fait dans la declaration de la propriete de l'objet il fallait rajouter : [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public Mon_ensemble_de_propriete Mais_qui_est_Arthenius { get { return Arthenius; } set { Arthenius=value; } } Merci a coq....une fois de plus... :o)))) un jour moi aussi je serais un p'tit poulet ;o)))
06 septembre 2004 15:58:17 :
Encore une petite mise à jour pour rendre le code un peu plus joli... dans le converter : au lieu d'instancier une variable instancedescripteur pour tester son type...je fais direct le typeof(System.ComponentModel.Design.Serialization.InstanceDescriptor)... c'est plus propre.... et rajout d'une capture d'ecran...
24 septembre 2004 09:42:37 :
Suppression de la class herite des expandableobjectConverter et devant l'objet qu'on veut faire apparaitre avec un plus on met.... : [TypeConverter(typeof(ExpandableObjectConverter))] Merci a Frederyck...pour cette simplification...qui marche :o))))) du coup le source passe d'initié....à débutant :o))))

 Sources du même auteur

Source avec Zip Source .NET (Dotnet) LIAISON DE 3 TABLES GRACE AU CURRENCYMANAGER
Source avec Zip Source avec une capture Source .NET (Dotnet) EXEMPLE D'UTILISATION D'UN DATAGRID, DATAADAPTER, SELECT SUR...
Source avec Zip Source avec une capture Source .NET (Dotnet) CONNECTIONSTRING SQL SERVER ET ACCESS, XML ET PRESSE PAPIER
Source avec Zip Source .NET (Dotnet) EXEMPLE D'UTILISATION DE DATAGRID AVEC 2 TABLES ORDERS ET DE...

 Sources de la même categorie

Source avec une capture Source .NET (Dotnet) AJOUTER DES BYTES À UN EXECUTABLE par t0fx
Source .NET (Dotnet) COPIER/ COLLER DATAGRID (COPY/PASTE) par jamesbidon
Source avec Zip Source .NET (Dotnet) MECANISME DE SYNCHRONISATION DE THREAD - MONITOR, MUTEX, SEM... par jesusonline
Source .NET (Dotnet) EVENTHANDLERS GÉNÉRIQUES par ricklekebekoi
Source avec Zip Source .NET (Dotnet) TRAITER UN FOREACH EN PARALLÈLE par maitredede

 Sources en rapport avec celle ci

Source avec Zip Source .NET (Dotnet) [DÉBUTANTS] ANIMATION DES FENETRES, CHARME SPÉCIALE POUR VOT... par boutemine
Source .NET (Dotnet) RENDRE UNE FENETRE TRANSPARENTE EN CAS DE DÉPLACEMENT DE CEL... par sephiro
Source avec Zip Source .NET (Dotnet) PROPRIÉTÉS D'EXTENSION AVEC C# 3.0 par mathmax
Source avec Zip Source .NET (Dotnet) BLOQUER UNE APPLICATION PAR SON NOM AVEC LES APIS WINDOWS par iow4
Source avec Zip Source .NET (Dotnet) ANIMATION D'UNE FENÊTRE... par sebmafate

Commentaires et avis

Commentaire de jesusonline le 03/09/2004 19:19:00 administrateur CS

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 :)

@+

Commentaire de sibi12 le 04/09/2004 11:06:42

Interessant...

Commentaire de coq le 05/09/2004 10:22:14 administrateur CS

moi aussi je pensais que c'était moins lourd que ça

Enfin c'est bon à savoir :)
Merci

Commentaire de Arthenius le 06/09/2004 08:56:50

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))))

Commentaire de coq le 06/09/2004 09:08:22 administrateur CS

lol
chuuuuuuut ;)

Commentaire de Arthenius le 06/09/2004 14:00:55

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...

Commentaire de coq le 06/09/2004 14:12:46 administrateur CS

euh
il me semble qu'il faut que tu regardes du côté de DesignerSerializer et/ou DesignerSerializerVisibility

Commentaire de Arthenius le 06/09/2004 14:22:41

et en francais ???

:o)))))))))

Commentaire de coq le 06/09/2004 14:36:47 administrateur CS

lol, ça :

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public Mon_ensemble_de_propriete Mais_qui_est_Arthenius
{
get
{
        
return Arthenius;
}
set
{
Arthenius=value;
}
}

Commentaire de Arthenius le 06/09/2004 14:42:56

coq tu m'enerve...

:o)))

c ca...

ben ca a failli....

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


:o))))))))))

Commentaire de jesusonline le 06/09/2004 17:58:46 administrateur CS

pffffff c pas cool va falloir que je mette à jour ma source en VB .net :D

Cyril

Commentaire de coq le 06/09/2004 18:02:41 administrateur CS

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"

Commentaire de Arthenius le 06/09/2004 18:04:20

lol...

mouis mais ca vaut le coup....

ca marche vachement mieux....

Commentaire de Arthenius le 06/09/2004 18:05:36

encore un pb de refresh ;o)))

Commentaire de jesusonline le 06/09/2004 22:59:01 administrateur CS

source updated : ---> http://www.vbfrance.com/code.aspx?ID=25937


Cyril

Commentaire de Frederyck le 23/09/2004 20:12:44

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
))].

Commentaire de Arthenius le 24/09/2004 09:05:50

je teste ca :o)))
ben en tout cas ca serait bien plus simple... :o)))

Commentaire de Arthenius le 24/09/2004 09:44:20

voila c a jour....

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

merci...

Commentaire de Frederyck le 24/09/2004 09:50:20

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 ?

Commentaire de Arthenius le 24/09/2004 10:00:23

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))))

Commentaire de Frederyck le 24/09/2004 10:48:02

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 ;)

Commentaire de Trentreznor le 14/03/2005 16:14:48

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?

Commentaire de Arthenius le 14/03/2005 16:34:20

non désolé...

Commentaire de coq le 14/03/2005 18:46:15 administrateur CS

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.

Commentaire de thorfen le 18/08/2006 10:22:56

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 !

Commentaire de Arthenius le 18/08/2006 11:10:49

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

Commentaire de Mahrak le 19/09/2007 19:38:54

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.

Commentaire de TigerFab le 29/11/2007 18:48:21 10/10

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))]

Commentaire de Arthenius le 30/11/2007 08:42:30

@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 ^^

Commentaire de TigerFab le 03/12/2007 21:11:26

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 ..
        

Commentaire de TigerFab le 07/12/2007 12:29:32

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.

Commentaire de Kelpan le 29/06/2008 23:03:49

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 ?

Commentaire de Kelpan le 29/06/2008 23:10:06

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

Commentaire de Arthenius le 30/06/2008 08:50:38

@Kelpan : non je ne vois malheureusement pas ou se situe ton souci :/

Commentaire de Kelpan le 30/06/2008 14:26:41

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

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

[C#] Agrandissement de fenetre [ par xeon666 ] Bonjour, J'ai déja regarder les autres post parlant de cela mais je n'ai pas trouver mon bonheur ... En fait, j'ai une application contenant une pic Winform : Amélioration de la propriété MdiParent [ par Arthenius ] Salut,voila je developpe une fenetre qui doit être utiliser par héritage.cette fenetre herite elle même de System.Windows.Forms.Form.j'aimerais amélio Suptile le treeview! [ par reyman ] J'ai un treeview avec un noeud racine et n noeud filsQuand je fais un clic GAUCHE sur le noeud A, la propriété "SelectedNode" prend la valeur de mon n Changer l'URL de la dernière fenetre internet explorer ouverte... [ par seup ] Bonjour,Je cherche a changer l'URL de la dernière fenetre internet explorer ouverte...Quelqu'un sait comment faire ?Merci d'avance. propriété clientID d'une texte box [ par armoun78 ] bonjour,j'ai un petit problème :je veux récupérer, côté serveur, l'id d'une asp:textbox qui va être générée côté client.pour cela il existe une propri Réduction de la MainForm [ par nerix27 ] Bonjour,voilà dans mon application, je veux enlever la fenetre de la TaskBar quand je la réduit...J'utiliserai donc : MainForm.ActiveForm.ShowInTaskba [c#] combobox bug [ par gibono ] Bonjour à tous,voilà j'ai un mega super bug combobox.Quand je rajoute un combobox dans mon form, impossible de mettre quelque chose dans la propriété Acceder aux proprietes d'une fenetre a partir d'une autre [ par akito06 ] Bonjour a tous et a toutesApres avoir bien exploré de nombreux post du forum, je ne trouve pas de solution a mon probleme.Le probleme : Application MD Menu Contextuel+OpenGL et fenetrage [ par dofdof ] Bonsoir,comment faire pour attacher un menu contextuel sur un control OpenGL?j'ai fait: ContexMenu->MenuContext1Enable->trueImeModed?Comment fai migration vb6 vers c# [ par lagoelle ] Bonjour,Je migre de VB6 à C# et des différences au niveau des controles m'étonne.Par exemple, le label en VB6 a une propriété


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,858 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales