cs_JLD2
Messages postés6Date d'inscriptionjeudi 22 janvier 2004StatutMembreDernière intervention23 janvier 2004
-
22 janv. 2004 à 11:36
cs_lagoelle
Messages postés102Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention17 mars 2009
-
11 déc. 2004 à 11:19
Bonjour dans une de mes applis en C#, j'ai associé un événement "checkchanged" à une checkbox (code automatique de visual) et quand je clique sur la checkbox pour mettre ou enlever la croix, le code de la fonction avec un nom du style : "checkboxxxx_checkchanged" est executé, jusqu'ici tout va bien !
Le pb c'est qu'à un autre endroit dans mon code je fais :
mycheckbox.checked = true; or false (selon)
et juste après avoir executé cette ligne il me lance la fonction "checkboxxxx_checkchanged" ce qui ne donne pas du tout le comportement souhaité à mon appli. (même pb avec une combobox)
Qq un Sait-il comment récupérer l'événement "checkchanged" seulement quand c'est l'utilisateur qui change la checkbox et non moi qui la modifie dans le code ?
J'ai bien penser comme solution à définir un booleen à true juste avant de modifier la checkbox dans le code puis de le remettre à false aussitot après, comme ça si en entrant dans "checkboxxxx_checkchanged" le booleen est true je ressort aussitot ; mais si vous avez un bricolage moins foireux à me proposer je suis preneur.
Thanos_the_yopper
Messages postés309Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention 5 mars 2009 22 janv. 2004 à 15:37
essaye d'utiliser l'événement "click" à la place de l'événement "checkchanged". Ainsi, ta fonction ne se lancera que quand l'utilisateur click et non pas quand ton appli change le "checked" de ta checkbox ^__^
...time flows like a river ...
... and history repeat again ...
cs_coq
Messages postés6350Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 22 janv. 2004 à 17:39
d'un autre coté il me semble que l'event click portera aussi sur le texte associé au checkbox
dans ce cas si l'utilisateur s'amuse à cliquer sur le texte ça declencherai aussi
a verifier
Thanos_the_yopper
Messages postés309Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention 5 mars 2009 22 janv. 2004 à 17:44
Ben j'ai fait le test et quand tu click sur le text associé au checkbox, ça change le "checked", donc c'est kif kif la bourrique :) dans les deux cas, l'événement se lance.
...time flows like a river ...
... and history repeat again ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Thanos_the_yopper
Messages postés309Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention 5 mars 2009 23 janv. 2004 à 09:35
non, en fait, ce que je voulais dire, c'est que, sans parler de control et autre, juste au niveau du fonctionnement de la checkbox en elle même, si tu click sur le texte et que la checkbox n'est pas cochée, ça la coche, et inversement :)
Donc, ce servir de l'événement click, ça marche très bien dans ce cas là :)
Donc d'utiliser l'évenement Click et l'événement CheckChanged, c'est la même chose au niveau du fonctionnement du checkbox, sauf qu'avec l'évément click, y'a plus de probleme quand il change l'état du checkbox directement par l'appli ^__^
cs_JLD2
Messages postés6Date d'inscriptionjeudi 22 janvier 2004StatutMembreDernière intervention23 janvier 2004 23 janv. 2004 à 11:59
Merci, pour l'idée du clic.
Mais pour être plus précis, ma question c'était comment différencier que la proprieté d'un contrôle change à cause de l'utilisateur ou à partir du code de l'application.
Car pour une checkbox l'evenement click va tourner (j'y avais un peu penser) mais de façon general je ne suis pas plus avancé.
En effet comme je l'ai dit (entre parenthèses et j'aurai du plutôt attaquer avec ça) j'ai le même problème avec une combobox et là un clic sur la combobox ne fait pas forcèment changer la valeur courante de la combobox, de plus les flèches de direction du clavier peuvent changer la valeur de la combobox. Donc ce qui m'interesse c'est l'evenement selectedindexchanged mais pas quand c'est le code qui le fait changer.
Les paramètres de la fonction associée à cet évenement sont :
- object sender
- System.EventArgs e
J'ai essayé de voir la dedans mais j'ai pas trouvé, la solution serait-elle là ?
Ou y a-t-il pour combobox un evenement qui corresponderait à ce que j'attends (pas trouvé, mais je les ai pas tous essayé un à un) ?
Enfin, je crois que dans mon appli je risque de rencontrer encore le même problème avec un dateTimePicker si la logique de microsoft est toujours la même, et de manière général j'aimerai connaître la solution pour n'importe quel controle.
Merci
Ah lala c'est bien compliqué ce que je veux, mais bon je trouve la gestion des événements un peu bizarre sous .NET par rapport à JAVA, même si il a d'autres avantages avec .NET
cs_coq
Messages postés6350Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 23 janv. 2004 à 12:13
y'a rien de bizarre lol
un changement d'index est un changement d'index, qu'il soit fait par l'utilisateur ou par le code
l'idée du bool C justement de differencier les declenchements d'event :
prenons un bool c_moi_qui_ai_changer = false;
quand tu fais ton changement dans le code tu le met à true
et dans le code de l'event tu met un
if ( c_moi_qui_ai_changer == false)
{
// code a exec seulement si le changement a été fait par l'utilisateur
}
cs_JLD2
Messages postés6Date d'inscriptionjeudi 22 janvier 2004StatutMembreDernière intervention23 janvier 2004 23 janv. 2004 à 12:32
Je dis pas le contraire avec le bool ça marche mais je trouve ça pas du tout élégant est pratique.
Si t'as une interface avec pas mal de ctrl (checkbox combobox et autres)
et dans les fonctions associées aux événements :
void fnctEvenemnt (...)
{
if (!monbool)
return;
...
}
De un c'est moche et super lourd. d'autre part dans une appli qui commence à être un peu grosse bonjour la maintenanbilité du code. Si t'oubli de mettre ton bool à un endroit après tu peux passer un bou de tps à chercher pourquoi ça marche pas parceque tu l'as oublié qq part, de deux si tu veux modifier ton code, c'est encore plus de boulot.
En bref c'est du bricoloage (certes ça marche)
En Java de ce coté là c'est moins foireux il ne te lance pas un événement si tu change un ctrl avec le code.
cs_JLD2
Messages postés6Date d'inscriptionjeudi 22 janvier 2004StatutMembreDernière intervention23 janvier 2004 23 janv. 2004 à 12:42
Aussi quel est l'interet d'associer un évenement à un changement d'état de ctrl par le code.
Si c'est l'utilisateur qui change le ctrl, tu peux pas le savoir à l'avance et t'as besoin d'un évenement pour le savoir et associer du code à cela.
Maintenant si c'est toi qui fait ça dans le code, à priori t'es au courant :-p, donc s'il y a d'autres choses à faire avec le changement du ctrl tu peux le faire et rajouter le code qui faut.
Bon bon aller je me calme, mais pour ce qui est de la politique de gestion des evenements avec .NET, ça me semble bizarre.
cs_coq
Messages postés6350Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 23 janv. 2004 à 13:44
bon, autre piste :
pkoi ne pas "désactiver" l'evenement avant de faire ta modif ?this.listBox_Reseaux.SelectedIndexChanged +new System.EventHandler(this.listBox_Reseaux_SelectedIndexChanged);> ajoute le déclenchement pour cet event là
this.listBox_Reseaux.SelectedIndexChanged -new System.EventHandler(this.listBox_Reseaux_SelectedIndexChanged);> retire le declenchement si je ne m'abuse (placé juste derriere à la bourrin, dans un focntion ce ne serait pas exactement le même code je pense)
enfin bon fo verifier un peu pck le code doit pas etre tres propre là
ça te permettrait donc d'eviter le declenchement de l'event comme il n'existerait plus à ce moment là
ensuite tu le remet juste apres ton changement
cs_JLD2
Messages postés6Date d'inscriptionjeudi 22 janvier 2004StatutMembreDernière intervention23 janvier 2004 23 janv. 2004 à 18:51
Mouai, à la limite je préfère encore le booléen, car on est encore avec le même problème que ça donne un code pas très lisible et d'un maintenabilité moyenne.
mais bon merci quand même :-)
Si je programme pas en JAVA c'est que d'une je suis en train d'essayer de découvrir C#, et s'il y avait que des inconvénients en C#, je serai retourné à JAVA.
On gère tout dans l'évenement OnPaint, donc autant de checkBox que tu le désires ;-)
Je migre de VB6 à C# et c'est dur, mais tellement intéressant ...
Au fait, coq je n'ai pas progresser à la vitesse de la lumière, j'ai trouvé cette façon de faire dans mon livre de chevet, "Programmer Microsoft Windows avec C#" de Charles PETZOLD (Excellent ouvrage pour se lancer et se perfectionner en C#). Sinon je bosses toujours sur mon cab et déCab, j'aurais peut-être besoin de ton aide à nouveau, coq.
JDL2, J'espères t'avoir proposer une solution qui te plaises d'avantage.