Comment choisir une valeur correspondant à un CheckBox ?
1ModdingMaster
-
26 févr. 2013 à 14:45
BasicInstinct
Messages postés1470Date d'inscriptionmardi 5 février 2002StatutMembreDernière intervention20 octobre 2014
-
27 févr. 2013 à 12:47
Bonjour à toutes et à tous, tout d'abord j'aimerai annoncer que si le thème que j'ai désigné ne correspond pas, je m'en excuse, le problème auquel je suis confronté est assez délicat !
J'ai récemment créé un petit logiciel de gestion (sans base de données, tout sera inscrit en dur dans le code) qui me permet de créer des fichiers pré-remplis en fonction des valeurs attribuées qui elles sont à choisir par l'utilisateur.
J'ai déjà conçu ce logiciel, mais avec différentes fenêtres en matière de choix, mais étant donné que je ne sais nullement utiliser ce procédé, j'ai décidé d'en choisir un autre, tout se passera sur un formulaire, où les étapes seront succédé par le biais d'un ControlTab à onglets, ce qui me paraît plus simple et plus compréhensible.
Cependant je suis de nouveau confronté à un problème, car j'ai décidé de conserver un choix de valeurs à CheckBox, un procédé à moitié saisissable, où je me prends la tête et si quelqu'un d'ingénieux pouvait m'éclairer ce serait vraiment sympa de sa part.
En gros, pour expliquer au mieux, chaque CheckBox contiendra ses propres valeurs, un par CheckBox, et j'en ai 18 ! Ce que je souhaiterai c'est que lorsque j'active un ChechBox (je le coche), sa valeur contenue vienne se mettre dans un afficheur de type Label pour ma part. Cette technique ça marche, seulement si je commence par le premier CheckBox, si en revanche je commence par le deuxième, là, la valeur ne s'inscrit pas dans le Label. Par contre si je coche toute les cases, une par une, jusqu'aux 18 cases et par ordre de haut en bas, ça marche.
Alors ce que j'attends comme solution ce serait une technique totalement différente si possible, car j'ai déjà beaucoup cherché, j'ai fait de nombreux essais (avec des Switch, avec des For Each, etc...) en vain, donc si je suis passé à côté de quelque chose de très simple, mais aveugle pour mes yeux, merci de m'en faire part.
Aussi, je vois que tu as ajouté "+ Combo.text +" à cet endroit, mais cet endroit j'en aurait besoin plus tard, il s'agira d'une variable liée avec un combobox qui retournera la valeur sélectionnée (je sais pas si c'est ce que tu voulais faire).
Ça marche, merci beaucoup à toi yann_lo_san, j'ai testé sur 3 CheckBox :
- L'ajout du 1, du 2, du 3 marche (peu importe le sens),
- L'ajout du 1, du 2 marche,
- L'ajout du 1, du 3 marche,
- L'ajout du 2, du 3 marche.
Ça doit faire pareil pour 18 CheckBox j'imagine.
J'ai juste deux choses à rectifier si ce n'est pas trop demandé, mais vu que le code marche mais que je n'ai rien compris à sa manière de fonctionner, j'évite d'y toucher, j'ai même vu que tu avais créé un abrégé (c au lieu de checkbox) si j'ai bien vu, donc j'évite toute tentative :).
Les deux choses à rectifier sont :
- Le PaddingRight de "Command" est figé à 24 car c'est de base, or celui de "SpecialPower" doit être de 19 afin que le "=" soit au même endroit, un moyen de régler ça puisque du coup pour chaque Tag le PadRight est de 24 ?
- J'ai bien revu l'ordre les CheckBox (1,2,3) ainsi que celui des CheckBox.Tag (Command,SpecialPower,Object), sauf que lors de la coche des cases, l'ordre d'inscription dans le label se fait ainsi (SpecialPower,Command,Object), et l'ordre doit être respecté au sens de lecture du code sinon ça ne marche pas. Aurais-tu s'il te plaît un moyen de correction pour que ce soit dans l'ordre ?
PS : Je viens de faire l'essai avec les 18 CheckBox, lors de l'inscription des valeurs dans le label, l'ordre est tout simplement décroissant, en gros si j'ai tout sélectionné, ça commence par "InPalantir" et ça fini par "Command". Un moyen pour afficher le résultat en ordre croissant svp ?
BasicInstinct
Messages postés1470Date d'inscriptionmardi 5 février 2002StatutMembreDernière intervention20 octobre 201412 27 févr. 2013 à 09:59
Si tu peux faire du Lync et si tes tabindex ont bien correctement été incrémenté :
tu dois pouvoir faire un truc comme ca :
foreach (CheckBox CH in tabControl1.TabPages[0].Controls.OfType<CheckBox>().OrderBy(C => C.TabIndex))
{
//code
}
n’empêche qu'au final, tu ne gères pas les tailles des PadRight, ni les combobox associés (j'ai toujours pas compris si tu en avis besoin ou non) et que la creation d'un UserControl permettrait de facilement gérer tout ça.
Merci beaucoup pour cette aide BasicInstinct, ta technique de OrderBy marche à merveille, ça ressemble à du SQL. J'ai bien toutes les lignes qui s'affichent comme je le voulais.
Du coup j'ai aussi trouvé pour le PaddingRight, pour chaque CheckBox.Tag, j'ai affecter la valeur (ex : "Command"), puis j'ai concaténé avec "".PadRight(XX).
Cette technique ne marchait pas : CheckBox1.Tag = "Command".PadRight(24);
J'ai donc fait comme ça : CheckBox1.Tag = "Command" + "".PadRight(24);
Merci pour vos aides à tous les deux en tout cas, c'était d'une grande utilité et au moins j'ai vu quelles techniques vous utilisiez, c'est vraiment sympa. Pour l'instant je ne pense pas avoir d'autres questions, mais j'ai à finir une affaire avec des CheckBox encore, et ce n'est pas exclus que je tombe sur des erreurs ;).
Ah si j'y pense, juste une question comme ça si ça rentre encore dans le contexte, j'ai 10 RadioButton sur ma page, mais le fait d'en cocher un empêche les autres d'être cochés, en gros je ne peux faire qu'un seul choix, alors qu'il m'en faudrait cinq, une idée svp ?