Bonjour tout est dans le titre petite question bête pour changer la couleur d'une combo par le code et non par le forms,
merci de votre aide
Version imprimable
Bonjour tout est dans le titre petite question bête pour changer la couleur d'une combo par le code et non par le forms,
merci de votre aide
WinForms ou WPF ? Et sinon dans quel contexte ? C'est pour un UserControl ? C'est pour faire varier la couleur en fonction d'une donnée ?
J'ai mon form où j'ai placé des combobox , et je veux que lorsque par exemple lors ce qu'un Evénement se déclenche cela change la couleur de la combo
Bonsoir,
Si c est un contrôle combobox provenant de la toolbox de visual studio alors en mode conception tu regardes la property grid pour voir quelles sont les propriétés correspondants a celles que tu veux modifier ensuite par le code.
Ensuite tu identifies l événement qui devra être utilisé et dans le corps de la méthode tu ajoutes tes conditionnelles avec les propriétés adéquates pour modifier la couleur de ta combobox......
NB : en winform il n y a pas de customisation tres poussee des controles contrairement à du WPF.
Ou alors toujours en winform il faut que tu codes ton propre combobox en GDI par exemple et/ou depuis le Paint event......
++
Code:
1
2
3
4 productTextBox.SelectedIndexChanged += (s, e) => productTextBox.BackColor = productTextBox.SelectedItem == null ? Color.Gray : productService.IsAvailable((Product) productTextBox.SelectedItem) ? Color.Green : Color.Red;
Effectivement j'ai posté un peu vite et sans mettre de contexte. Comme tu n'as pas donné de détail j'ai imaginé une situation dans laquelle une ComboBox contient une liste de produit et dont on veut que l'affichage varie lorsqu'un produit est sélectionné et selon qu'il est disponible ou pas. L'objet producService est un objet imaginaire de service permettant d'aller interroger une base de données pour une liste de produits. L'idée générale est d'attacher une méthode (ici j'ai fait une lambda ; on aurait pu l'améliorer en la rendant asynchrone) à un événement et d'effectuer un traitement en réponse à une action de l'utilisateur. Le code que j'ai mis modifie la couleur de fond (BackColor) mais il existe d'autres propriétés.
Si tu veux plus de précisions il faudra que tu nous en dise plus sur ce que tu veux faire.
Déjà merci c'est parfait l'explication ,
en fait j'ai deux combobox toutes simples et j'aimerais que quand par exemple j'appuye sur un bouton sa me change le back color de celle qui est vide par exemple (Grossomodo) : -->
Bien sur la syntaxe de back color est fausse c'est ce que je cherche ,Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 private void button_search_click(object sender, EventArgs e) { if (combobox1.SelectedIndex != -1 & combobox2.Selected.Index == -1) { combobox1.backcolor.changed = Green; /* Vert pour dire que c'est bon*/ combobox2.backcolor.changed = Red; /* Rouge pour dire que c'est faux*/ } else if (combobox1.SelectedIndex == -1 & combobox2.Selected.Index != -1) { combobox1.backcolor.changed = Red; /* Rouge pour dire que c'est faux*/ combobox2.backcolor.changed = Green; /* Vert pour dire que c'est bon*/ } }
je vien d'écrire le code à l'instant c'est moche mais j'essaye de me faire comprendre dites moi si ce n'est pas clair
C'est probablement quelque-chose comme ça :
Mais c'est typiquement le genre d'info que tu as dans la MSDN.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 private void button_search_click(object sender, EventArgs e) { if (combobox1.SelectedIndex != -1 && combobox2.SelectedIndex == -1) // Utiliser le && booléen !! { combobox1.BackColor = Color.Green; /* Vert pour dire que c'est bon*/ combobox2.BackColor = Color.Red; /* Rouge pour dire que c'est faux*/ } else if (combobox1.SelectedIndex == -1 && combobox2.SelectedIndex != -1) { combobox1.BackColor = Color.Red; /* Rouge pour dire que c'est faux*/ combobox2.BackColor = Color.Green; /* Vert pour dire que c'est bon*/ } }
J'ai toujours le même problème soit color n'est pas accessible dans le contexte actuel sois il manque des références
et oups pour le "&&" merci :p
Color pour WinForms : https://docs.microsoft.com/en-us/dot...tframework-4.8
S'il le faut met le namespace complet puis simplifie. Il y a un ensemble de couleurs standard définies en propriétés statiques sur la struct.
idem , je crois que j'ai une référence assembly pour les couleurs qui doit manquer , je peux pas utiliser les couleurs dans mon code... Même avec la doc microsoft j'ai les même erreurs. Ou alors je comprends vraiment pas.. En tous cas merci beaucoup
Poste l'erreur et/ou ton code et/ou une capture d'écran de ton IDE.
Je met l'erreur parce qu' en soit le code c'est celui du dessus ..
Pièce jointe 486959
Bonjour
Pour "personnaliser" l'apparence d'un combobox Winform GDI, les 2 events DrawItem et MeseareItem sont tes amis...
Extrait de la MDSN Help Fr:
code d'accompagnement "self explanatory" :Citation:
L'exemple de code suivant illustre comment créer une zone de liste déroulante owner-drawn en affectant OwnerDrawnVariable à la propriété DrawMode et en gérant les événements DrawItem et MeasureItem. Il illustre aussi la définition des propriétés DropDownWidth et DropDownStyle. Pour exécuter l'exemple, collez le code suivant dans un formulaire. Appelez la méthode InitializeComboBox dans le constructeur du formulaire ou l'événement Load.
bon code...Code:
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 internal System.Windows.Forms.ComboBox ComboBox1; private string[] animals; // This method initializes the owner-drawn combo box. // The drop-down width is set much wider than the size of the combo box // to accomodate the large items in the list. The drop-down style is set to // ComboBox.DropDown, which requires the user to click on the arrow to // see the list. private void InitializeComboBox() { this.ComboBox1 = new ComboBox(); this.ComboBox1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable; this.ComboBox1.Location = new System.Drawing.Point(10, 20); this.ComboBox1.Name = "ComboBox1"; this.ComboBox1.Size = new System.Drawing.Size(100, 120); this.ComboBox1.DropDownWidth = 250; this.ComboBox1.TabIndex = 0; this.ComboBox1.DropDownStyle = ComboBoxStyle.DropDown; animals = new string[]{"Elephant", "c r o c o d i l e", "lion"}; ComboBox1.DataSource = animals; this.Controls.Add(this.ComboBox1); // Hook up the MeasureItem and DrawItem events this.ComboBox1.DrawItem += new DrawItemEventHandler(ComboBox1_DrawItem); this.ComboBox1.MeasureItem += new MeasureItemEventHandler(ComboBox1_MeasureItem); } // If you set the Draw property to DrawMode.OwnerDrawVariable, // you must handle the MeasureItem event. This event handler // will set the height and width of each item before it is drawn. private void ComboBox1_MeasureItem(object sender, System.Windows.Forms.MeasureItemEventArgs e) { switch(e.Index) { case 0: e.ItemHeight = 45; break; case 1: e.ItemHeight = 20; break; case 2: e.ItemHeight = 35; break; } e.ItemWidth = 260; } // You must handle the DrawItem event for owner-drawn combo boxes. // This event handler changes the color, size and font of an // item based on its position in the array. private void ComboBox1_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e) { float size = 0; System.Drawing.Font myFont; FontFamily family = null; System.Drawing.Color animalColor = new System.Drawing.Color(); switch(e.Index) { case 0: size = 30; animalColor = System.Drawing.Color.Gray; family = FontFamily.GenericSansSerif; break; case 1: size = 10; animalColor = System.Drawing.Color.LawnGreen; family = FontFamily.GenericMonospace; break; case 2: size = 15; animalColor = System.Drawing.Color.Tan; family = FontFamily.GenericSansSerif; break; } // Draw the background of the item. e.DrawBackground(); // Create a square filled with the animals color. Vary the size // of the rectangle based on the length of the animals name. Rectangle rectangle = new Rectangle(2, e.Bounds.Top+2, e.Bounds.Height, e.Bounds.Height-4); e.Graphics.FillRectangle(new SolidBrush(animalColor), rectangle); // Draw each string in the array, using a different size, color, // and font for each item. myFont = new Font(family, size, FontStyle.Bold); e.Graphics.DrawString(animals[e.Index], myFont, System.Drawing.Brushes.Black, new RectangleF(e.Bounds.X+rectangle.Width, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)); // Draw the focus rectangle if the mouse hovers over an item. e.DrawFocusRectangle(); }
@MABROUKI C'est peut-être un peu overkill par rapport à la demande de départ, non ?
@BiRoy Est-ce-que ça marche si met le nom complet avec les namespace ?
Sinon est-ce-que tu as bien System.Drawing.dll dans tes références ?Code:CodeEtatFS_ComboBox_Home.BackColor = System.Drawing.Color.Red;
Il te manque le using System.Drawing; en tête de fichier ; ou bien il y a deux objets qui s'appellent Color dans des namespaces différents et il ne sait plus lequel il doit choisir (quoique dans ce cas il devrait plutôt faire une erreur du type "référence ambigüe entre Machin.Bidule et Truc.Bidule").
Ok bon super merci pour tous alors !!!