IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#] ListBox & Couleur


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Asiany
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 73
    Par défaut [C#] ListBox & Couleur
    Salut,

    J'expose mon problème, je suis actuellement en train de réalisé une petite application windows. Dans celle-ci j'ai deux listBox, une nommé "Fichiers sélectionner", une autre nommé rapport. Je penche sur un problème que j'ai du mal à résoudre tous seul donc je m'adresse à vous.

    J'aimerai donc remplir ma listBox Rapport au fur et à mesure que je calcule par exemple la taille du dossier x spécifié à la ligne i de la listBox Fichiers... , donc, la remplir par exemple avec un texte, " Taille du fichier = xxx octets ". Ca j'y arrive, pas de problème.. Mais je voudrais coloré en rouge par exemple les fichiers qui ont leur taille qui dépasse 80 000 octets et les autres qui sont inférieures à cette limite les coloré en vert.

    Donc, je bloque ici, j'ai essayé plusieurs truc sans succès, j'arrive souvent sur le fait que c'est tout le texte de la listBox qui est en rouge ou en vert et non les deux. J'ai essayé aussi avec Drawmode mais je ne connais pas très bien cette méthode... malgré ça, avec DrawMode j'ai réussi à coloré mes textes en vert et rouge mais, tous les textes sont superposé donc illisible (au lieu qu'ils soient les un en dessous des autres) .

    Donc voilà si quelqu'un peut m'aider?!
    Merci d'avance

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Par défaut
    Tu as deux solutions .....

    - Soit tu crées ton contrôle personnalisé qui hérite de ListBox de manière à ce
    qu'il gère des couleurs différentes pour chacune ses lignes.

    - Soit tu utilises un autre contrôle pour réaliser cette opération.
    • ListView : je ne sais pas si ce contrôle permet de faire ça
    • grille de type Excel



    Bon courage !!

  3. #3
    Membre éclairé Avatar de Asiany
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 73
    Par défaut
    Aie aie contrôle personnalisé... je commence à peine le C# et les WinForms lol

    Pour ce qui en est des listView, j'ai essayé sans succès. Merci quand même

  4. #4
    Membre éclairé Avatar de Asiany
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 73
    Par défaut
    Personne qui peut m'éclairer?

  5. #5
    Membre confirmé Avatar de Mast3rMind
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 226
    Par défaut
    Citation Envoyé par leSeb
    - Soit tu crées ton contrôle personnalisé qui hérite de ListBox de manière à ce
    qu'il gère des couleurs différentes pour chacune ses lignes.
    Je t'encourage à essayer cette solution, même si tu débutes ce n'est pas si difficile à faire et tu apprendras beaucoup par la même occasion! Si tu as des difficultés tu peux demander de l'aide sur ce forum, au fur et à mesure.

    Bonne chance!

  6. #6
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    Salut

    Il existe des controles sur internet dispo gratuitement qu'on peut utiliser ou adapter:
    http://vbaccelerator.com/home/NET/Co...oBox/index.asp
    par exemple (avec une icone ou une couleur pour indiquer l'etat d'un element)

  7. #7
    Membre éclairé Avatar de Asiany
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 73
    Par défaut
    Citation Envoyé par Mast3rMind
    Je t'encourage à essayer cette solution, même si tu débutes ce n'est pas si difficile à faire et tu apprendras beaucoup par la même occasion! Si tu as des difficultés tu peux demander de l'aide sur ce forum, au fur et à mesure.

    Bonne chance!
    Je veux bien essayer mais par où commencer ...

  8. #8
    Membre éclairé Avatar de Asiany
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 73
    Par défaut
    Bon je pense avoir réalisé quelque chose de pas mal, si vous pouvez me confirmer..

    J'ai donc créer un contrôle personnalisé qui hérite d'une listBox, voilà le résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Windows.Forms;
     
     
    namespace lB_Perso
    {
     
    	public class ListBox_Personnalise : System.Windows.Forms.ListBox
    	{
    		private SolidBrush sbText=null;				
    		private SolidBrush sbTextSelected=null;
     
    		private Hashtable Color_Texte=null;
     
    		public ListBox_Personnalise()
    		{
    			Color_Texte=new Hashtable();
    			this.DrawMode=DrawMode.OwnerDrawVariable;
    			sbText=new SolidBrush(this.ForeColor);
    			sbTextSelected=new SolidBrush(Color.FromKnownColor(KnownColor.HighlightText));
     
    		}
     
     
    		//ajoute un item en spécifiant ce qu'on doit écrire "sender" et 
    		//en quelle couleur l'écrire
    		public void ItemAdd(object sender,Color c)
    		{
    			Color_Texte.Add(this.Items.Count,new SolidBrush(c));
    			this.Items.Add(sender);
    		}
     
     
     
    		// couleur de l'item
    		public void ItemColor(int indice_item,Color c)
    		{
    			if (Color_Texte[indice_item]==null) 
    			{
    				if (c==Color.Empty)
    					return;
    				else
    					Color_Texte.Add(indice_item,new SolidBrush(c));
    			}
    			else
    			{
    				if (c==Color.Empty)
    					Color_Texte.Remove(indice_item);
    				else
    					Color_Texte[indice_item]=new SolidBrush(c);
    			}
     
    			this.RefreshItem(indice_item);	
    		}
     
     
     
    		// on dessine l'item
    		protected override void OnDrawItem(DrawItemEventArgs e)
    		{
    			if (DesignMode && this.Items.Count==0)
    				base.OnDrawItem(e);
    			else
    			{
    				SolidBrush brushText;
    				e.DrawBackground(); //Modifie le background si iTem sélectionné
    				e.DrawFocusRectangle(); //Ajoute rectangle si list à le focus
     
    				Rectangle rectBound=e.Bounds;
    				rectBound.Width-=15;
     
    				if (e.Index!=-1)
    				{
    					if (GetSelected(e.Index)) 
    					{
    						brushText=sbTextSelected;			// lorsque l'item est sélectionné, la couleur du texte change == null cad blanc
    					}
    					else 
    					{
    						if (Color_Texte[e.Index]!=null)
    							brushText=(SolidBrush)Color_Texte[e.Index];		//couleur
    						else
    							brushText=sbText;
    					}
     
    					e.Graphics.DrawString(this.Items[e.Index].ToString(),Font,brushText,e.Bounds);
    				}
    				base.OnDrawItem(e);
    			}
     
    		}
     
     
    		// lorsque le curseur de la souris passe 
    		protected override void OnMouseDown(MouseEventArgs e)
    		{
    			this.Invalidate();	
    			base.OnMouseDown (e);
    		}
     
     
     
    		/// <summary>
    		/// Nettoye et libère les ressources utilisées.
    		/// </summary>
    		protected override void Dispose( bool disposing )
    		{
     
    			base.Dispose( disposing );
    		}
     
     
    	}
    }
    Voilà si quelqu'un peut me dire ce qu'il en pense.

  9. #9
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Pas mal !

    Deux remarques :
    * une hashtable que tu utilises avec un index, c'est très tordu. Je conseille l'ArrayList.
    * Les SolidBrush, il faut les Disposer après utilisation, sinon ça reste en mémoire

    Qq tout petits pts de détails :
    * L'override de 'Dispose()' tu peux l'enlever, il sera appelé tout seul par polymorphisme si nécessaire.
    * T'as des usings qui servent à rien.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] ListBox et couleur
    Par SSOOAADD dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/08/2011, 15h15
  2. Dans une ListBox, une couleur par ligne
    Par molo2003 dans le forum Windows Forms
    Réponses: 0
    Dernier message: 13/02/2010, 12h17
  3. ListBox Scrollbar Couleur
    Par gobgob dans le forum Delphi
    Réponses: 9
    Dernier message: 29/05/2007, 11h12
  4. ListBox et couleurs
    Par mohamed dans le forum Delphi
    Réponses: 4
    Dernier message: 12/09/2006, 17h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo