Bonjour,
J'ai besoin de mettre un élément non selectionnable, c'est à dire quand la souris passe sur l'item il n'est pas mis en surbrillance, dans une combobox.
Est-ce que quelqu'un saurait m'apporter une solution ? ou un début de solution ?
Merci.
Version imprimable
Bonjour,
J'ai besoin de mettre un élément non selectionnable, c'est à dire quand la souris passe sur l'item il n'est pas mis en surbrillance, dans une combobox.
Est-ce que quelqu'un saurait m'apporter une solution ? ou un début de solution ?
Merci.
Si ce que j'ai bien compris, tu veux rendre un champs non sélectionnable dans ta combobox pour indiquer à l'utilisateur de faire un choix, ou autre.
Si c'est ça regarde dans les propriétés de ta combobox, il y a un champ "texte" qui est le texte par défaut que voix l'utilisateur, le texte saisie apparaitra ainsi dans ta combobox par défaut mais ne seras pas sélectionnable.
Voilà en espérant t'avoir aidé.
Merci pour ta proposition, mais en fait ce n'est pas ce que j'essaye de faire.
Pour être plus clair voici un exemple, je voudrais avoir dans ma combobox les éléments suivants :
Catégorie 1
item 1.1
item 1.2
Catégorie 2
item 2.1
item 2.2
Avec les catégories ne pouvant pas être séléctionnées et si la souris passe dessus elles ne sont pas mis en surbrillance, les items fonctionnant normalement (surbrillance et séléctionnables).
J'ai déjà une classe combobox spécifique à mon projet qui me permet d'afficher des images (à gauche du texte de mes items) et une tabluation, pour faire ca j'ai redéfini la méthode OnDrawItem() de la classe combobox dans ma classe spécifique.
J'ai aussi une classe pour les items de ma combobox qui me permet de spécifier le texte, l'index de l'image associé dans l'imagelist de ma combobox spécifique et la tabulation à appliquer.
J'espère avoir rendu mon problème plus clair et je suis toujours à la recherche d'une solution :)
Salut,
Pourquoi ne pas utiliser 2 comboBox : un pour les catégories et l'autre pour les items
tu charges tous tes catégories dans le premier combo box et la liste du deuxième combo dépendra du choix que l'utilisateur aura fait dans le premier combo box (catégorie).
Merci pour ta contribution, mais je dois respecter un style d'UI pour une application déjà éxistante. Et je ne peux pas utiliser leur composants car je développe un plugin pour cette application en C# alors que l'application est écrite en C++.
Donc je dois reproduire leur présentation sous forme de combobox avec des éléments non selectionnable.
salut
tu as un composant qui fait cela sur www.codeproject.com
The Monz, Toulouse
Tu nous envoies directementùsur le site de codeplex. Peut on avoir le lien exact. J'ai cherché mais rien trouvé.
Cette discussion m'interresse vraiment.:lol: :
Ecrire un comboBox qui fait ce que Maxinquaye propose.
genre
Ca
par exemple
Mais, il me semble qu'il y en a d'autre sur le même site
The Monz, Toulouse
PS : J'ai dit CodePRoject, pas codeplex :)
Merci beauoup de ton aide, mais ... ce n'est toujours pas ça :P
L'exemple que tu as mis en lien permet d'avoir des séparateurs non séléctionnables entre les éléments d'une combobox, mais la méthode OnDrawItem de l'auteur ne fait que dessiner une ligne en dessous d'un item, j'ai essayé de faire en sorte qu'un texte soit écrit à la place de la ligne mais le résultat n'est pas du tout ce que je cherche à obtenir.
J'ai déjà cherché quelques heures sur Internet, ainsi que sur codeproject, mais peut-être pas avec les bons mots clefs ...
J'ai essayé les combinaisons de : combobox, item, non selectable, disable
Merci de votre aide, si jamais quelqu'un a une idée je suis toujours preneur, sinon je vais essayé de me débrouiller tout seul.
salut
j'ai pas l'impression que ton truc soit compliqué... voici un bout de code
Tu crées une forme, tu mets une combobox
J'ai rempli la propriété Items de la combo avec 9 valeurs
Mode : OwnerDraw => Fixed
Event pour : DrawItem et ValueChangecommit
et voici le 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 private Dictionary<int, bool> state; public Form1() { InitializeComponent(); state = new Dictionary<int, bool>(); state[0] = true; state[1] = false; state[2] = false; state[3] = false; state[4] = false; state[5] = true; state[6] = false; state[7] = false; state[8] = false; } private void button1_Click(object sender, EventArgs e) { Properties.Settings.Default.Manue = MyConf.MyBackColor; } private void comboBox1_DrawItem(object sender, DrawItemEventArgs e) { Trace.WriteLine("Draw Item"); Graphics g = e.Graphics; if (state[e.Index]) { g.DrawString(comboBox1.Items[e.Index].ToString(), Font, new SolidBrush(Color.Red), e.Bounds); } else { e.DrawBackground(); g.DrawString(comboBox1.Items[e.Index].ToString(), Font, new SolidBrush(ForeColor), e.Bounds); } } private void comboBox1_SelectionChangeCommitted(object sender, EventArgs e) { if (state[comboBox1.SelectedIndex]) { comboBox1.SelectedIndex = -1; } }
Pour explication :
1 Dictionnaire qui contient l'état des objets (ici, j'ai fait vite en mettant un index et un boolean pour savoir si l'objet était utilisable ou pas :)
Ensuite, dans le draw, tu fais en le choix en fonction de l'état
et dans le ValueChangeCommit, tu mets à -1 la selection si celle ci fait partie des objets non sélectionnables :)
Ca répond à ta question maintenant ? :)
The Monz, Toulouse
Merci beaucoup the Monz, ta solution est parfaite :)
L'astuce se trouve dans l'appel à DrawBackground() et la redéfinition de OnSelectionChangeCommitted() pour ma combobox.
Problème résolu :bravo: