Conversion string en color [Résolu]

Signaler
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
-
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
-
Salut,

voilà j'aimerai sauvegarder l'apparence de mon projet dans un fichier .ini. J'y suis arrivé grace à une class récupérée sur le forum (merci).
Le probleme c'est que cette classe me retourne une string (normal) mais moi je voudrais la convertir en couleur.

J'ai essayé:
this.BackColor= file.GetValue("MainForm","BackColor");
mais j'ai bien entendu un message d'erreur:
"Cannot convert type 'string' to 'system.Drawing.Color'"

j'ai alors tenté sans succes un:
this. BackColor =(system.Drawing.Color) file.GetValue("MainForm","BackColor");
mais j'ai exactement la même erreur.

petite précision qui n'a pas la moindre importance car le probleme apparait à la compilation, mais bon dans mon fichier .ini j'ai ça:
[MainForm]
BackColor=Color [Window]
je precise cette information car je pense que je vais avoir du mal à convertir ça en couleur et pourtant j'enregistre mon .ini comme suit:

IniFile file
=new IniFile("main.ini");


file
.SetValue("MainForm","BackColor",this
.BackColor
.ToString());


file
.Save("Hexa.ini");

Merci pour toute l'aide que vous m'apporterez.

Nico

7 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
Naturellement que si, c'est juste que j'ai oublier de répondre ce matin :p

Control sourceControl = ((MenuItem)sender).GetContextMenu().SourceControl;

/*
coq
MVP Visual C#
*/
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
Salut,

Utilise Color.FromName avec le nom situé entre [] si il s'agit d'une couleur connue (voir KnownColor)

Dans le cas d'une couleur quelconque, la chaine sera de cette forme là : " Color [A=xx R=xx G=xx B=xx]"
A toi de récupérer les valeurs et d'utiliser ensuite Color.FromArgb.

/*
coq
MVP Visual C#
*/
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
Sauf que l'utilisation de la couleur "connue" permet de suivre les évolutions du choix de l'utilisateur au niveau global, alors que si tu sauvegardes uniquement le argb tu restes sur une couleur fixe.
C'est donc une question de choix.
Enfin le mieux serait probablement de sérialiser l'instance de Color, mais dans du ini c'est pas terrible.

/*
coq
MVP Visual C#
*/
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
2
merci pour vos reponses.
J'ai une autre question:
J'ai un menu contextuel dans lequel je peux choisir le changer la couleur d'un objet (grace à l'objet ColorDialog). Le probleme c'est que je n'arrive pas à savoir sur quel objet l'utilisateur a appelé le menu contextuel doncje ne peux pas changer la couleur de cet objet.

Je ne sais pas si c'est clair. En gros pour simplifier, disons que j'ai un TextBox et un Bouton, les deux appellent le meme menu contextuel. Dans ce menu je peux choisir de changer la couleur de backcolor. Le probleme c'est que la fonction me permet de savoir qui a généré l'appelle de cette fonction grace à "sender". Mais sender c'est toujours l'item de mon menu contextuel pas l'objet sur lequel a été appelé mon menu.
(est-ce vraiment plus clair??? pas sur).
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
2
On dit généralement pas de nouvelle bonne nouvelle, mais dans mon cas il semblerait que la chose soit infaisable sinon je pense que j'aurai déjà eu quelques réponses...
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
2
merci encore.
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Autant enregistrer dès le départ la valeur ARGB.

// Obtenir la valeur ARGB sous form de chaine
string s = this.BackColor.ToArgb( ).ToString( );

// Récuperer une stucture Color depuis la chaine
thisBackColor = Color.FromArgb( int32.Parse( s ) );