Suspendre un événement

Le
Alain
Bonjour à toutes et à tous.

Je développe en VB sous .NET une petite application Windows.
Je souhaite suspendre le déclenchement d'un événement donné pour un des
objets de mon interface graphique de manière temporaire.
Voici pourquoi:
J'ai un DateTimePicker.
Lorque l'utilisateur en modifie la valeur, je dois faire un traitement.
J'utilise donc l'événement ValueChanged de mon DateTimePicker pour démarrer
le traitement ad hoc.
Au début de ce traitement, je vérifie la valeur de mon DateTimePicker et, si
nécessaire, je la modifie mais il ne faut pas à ce moment que l'événement
ValueChanged soit déclenché à nouveau!
Je souhaite donc suspendre le déclenchement du ValueChanged juste le temps
qu'il me faut pour corriger éventuellement la valeur en question.

Suis-je clair?
Avez-vous une idée?

Merci d'avance,
Alain. (Belgique)
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Vincent Poyo
Le #12203171
Bonjour,

tu peux toujours utiliser un flag (booléen) pour simuler ca.

avant de changer la valeur, tu passes ton booléen a false puis après tu le
remets a true.
et au début de la méthode qui gère l'évènement, un petit if mon_boolen =
false then return.

peut être rajouter également un petit DoEvents() avant de remettre ton
booléen à true, histoire de t'assurer que l'appel à la méthode d'event a été
faite.



"Alain" news:
Bonjour à toutes et à tous.

Je développe en VB sous .NET une petite application Windows.
Je souhaite suspendre le déclenchement d'un événement donné pour un des
objets de mon interface graphique de manière temporaire.
Voici pourquoi:
J'ai un DateTimePicker.
Lorque l'utilisateur en modifie la valeur, je dois faire un traitement.
J'utilise donc l'événement ValueChanged de mon DateTimePicker pour
démarrer le traitement ad hoc.
Au début de ce traitement, je vérifie la valeur de mon DateTimePicker et,
si nécessaire, je la modifie mais il ne faut pas à ce moment que
l'événement ValueChanged soit déclenché à nouveau!
Je souhaite donc suspendre le déclenchement du ValueChanged juste le temps
qu'il me faut pour corriger éventuellement la valeur en question.

Suis-je clair?
Avez-vous une idée?

Merci d'avance,
Alain. (Belgique)




Alain
Le #12203161
Merci pour ta réponse.

Oui, j'avais pensé à un booléen mais ça devient un peu trop compliqué pour
moi.

J'ai déjà développé des macros en VB sous Excel et là il est possible de
suspendre un événement.
C'est bien plus simple à écrire et surtout plus simple à la relecture pour
la maintenance de l'application un an après...

Je pense aussi qu'il y a moyen de dé-enregistré la procédure qui sera
appelée par un événement donné pour un objet donné de manière dynamique.
Qui sais comment ?

Bye,
Alain.






"Vincent Poyo"
Bonjour,

tu peux toujours utiliser un flag (booléen) pour simuler ca.

avant de changer la valeur, tu passes ton booléen a false puis après tu le
remets a true.
et au début de la méthode qui gère l'évènement, un petit if mon_boolen =
false then return.

peut être rajouter également un petit DoEvents() avant de remettre ton
booléen à true, histoire de t'assurer que l'appel à la méthode d'event a
été faite.



"Alain" news:
Bonjour à toutes et à tous.

Je développe en VB sous .NET une petite application Windows.
Je souhaite suspendre le déclenchement d'un événement donné pour un des
objets de mon interface graphique de manière temporaire.
Voici pourquoi:
J'ai un DateTimePicker.
Lorque l'utilisateur en modifie la valeur, je dois faire un traitement.
J'utilise donc l'événement ValueChanged de mon DateTimePicker pour
démarrer le traitement ad hoc.
Au début de ce traitement, je vérifie la valeur de mon DateTimePicker et,
si nécessaire, je la modifie mais il ne faut pas à ce moment que
l'événement ValueChanged soit déclenché à nouveau!
Je souhaite donc suspendre le déclenchement du ValueChanged juste le
temps qu'il me faut pour corriger éventuellement la valeur en question.

Suis-je clair?
Avez-vous une idée?

Merci d'avance,
Alain. (Belgique)







Stéphane
Le #12203111
Bonjour Alain,

Pour avoir déjà eu ce problème, j'ai appliqué la même méthode qu'a décrit
Vincent.

S'il ne s'agit que de faciliter la lecture du code, notamment pour la
maintenance, il suffit tout simplement de bien commenter.

Un commentaire quand tu flaggues ton booléen :
'la variable booléenne mise_a_jour_en_cours est mise à vrai
'pour ne pas relancer le traitement sur l'évènement après mise à jour du
contrôle mon_controle ci-dessous
'puis la variable est remise à faux une fois les mises à jour effectuées
mise_a_jour_en_cours=true
mon_controle1=ma_donnée1
mon_controle2=ma_donnée2
mise_a_jour_en_coursúlse

Et un autre commentaire au début de l'événement en question :
'Vérification s'il s'agit d'une mise à jour de l'utilisateur ou du programme
'la variable booléenne mise_a_jour_en_cours est mise à vrai dans les
procédures ma_procédure1 et ma_procédure2
'si tel est le cas, le traitement ci-dessous ne doit pas se lancer
if mise_a_jour_en_cours then
'traitement
end if


Stéphane.


"Alain"
Merci pour ta réponse.

Oui, j'avais pensé à un booléen mais ça devient un peu trop compliqué pour
moi.

J'ai déjà développé des macros en VB sous Excel et là il est possible de
suspendre un événement.
C'est bien plus simple à écrire et surtout plus simple à la relecture pour
la maintenance de l'application un an après...

Je pense aussi qu'il y a moyen de dé-enregistré la procédure qui sera
appelée par un événement donné pour un objet donné de manière dynamique.
Qui sais comment ?

Bye,
Alain.






"Vincent Poyo"
Bonjour,

tu peux toujours utiliser un flag (booléen) pour simuler ca.

avant de changer la valeur, tu passes ton booléen a false puis après tu
le remets a true.
et au début de la méthode qui gère l'évènement, un petit if mon_boolen =
false then return.

peut être rajouter également un petit DoEvents() avant de remettre ton
booléen à true, histoire de t'assurer que l'appel à la méthode d'event a
été faite.



"Alain" news:
Bonjour à toutes et à tous.

Je développe en VB sous .NET une petite application Windows.
Je souhaite suspendre le déclenchement d'un événement donné pour un des
objets de mon interface graphique de manière temporaire.
Voici pourquoi:
J'ai un DateTimePicker.
Lorque l'utilisateur en modifie la valeur, je dois faire un traitement.
J'utilise donc l'événement ValueChanged de mon DateTimePicker pour
démarrer le traitement ad hoc.
Au début de ce traitement, je vérifie la valeur de mon DateTimePicker
et, si nécessaire, je la modifie mais il ne faut pas à ce moment que
l'événement ValueChanged soit déclenché à nouveau!
Je souhaite donc suspendre le déclenchement du ValueChanged juste le
temps qu'il me faut pour corriger éventuellement la valeur en question.

Suis-je clair?
Avez-vous une idée?

Merci d'avance,
Alain. (Belgique)











Vincent Poyo
Le #12203081
Je pensais que le booléen était plus simple justement.

sinon regarde du coté des opérateurs RemoveHandler et AddHandler
qui est l'équivalent VB du c# avec les opérateur -= et += pour les events.

ca devrait donner un truc du style :

RemoveHandler monDateTimePicker.ValueChanged, AddressOf
Me.monDateTimePicker_ValueChanged
//mon traitement
AddHandler monDateTimePicker.ValueChanged, AddressOf
Me.monDateTimePicker_ValueChanged

"Stéphane" news:
Bonjour Alain,

Pour avoir déjà eu ce problème, j'ai appliqué la même méthode qu'a décrit
Vincent.

S'il ne s'agit que de faciliter la lecture du code, notamment pour la
maintenance, il suffit tout simplement de bien commenter.

Un commentaire quand tu flaggues ton booléen :
'la variable booléenne mise_a_jour_en_cours est mise à vrai
'pour ne pas relancer le traitement sur l'évènement après mise à jour du
contrôle mon_controle ci-dessous
'puis la variable est remise à faux une fois les mises à jour effectuées
mise_a_jour_en_cours=true
mon_controle1=ma_donnée1
mon_controle2=ma_donnée2
mise_a_jour_en_coursúlse

Et un autre commentaire au début de l'événement en question :
'Vérification s'il s'agit d'une mise à jour de l'utilisateur ou du
programme
'la variable booléenne mise_a_jour_en_cours est mise à vrai dans les
procédures ma_procédure1 et ma_procédure2
'si tel est le cas, le traitement ci-dessous ne doit pas se lancer
if mise_a_jour_en_cours then
'traitement
end if


Stéphane.


"Alain"
Merci pour ta réponse.

Oui, j'avais pensé à un booléen mais ça devient un peu trop compliqué
pour moi.

J'ai déjà développé des macros en VB sous Excel et là il est possible de
suspendre un événement.
C'est bien plus simple à écrire et surtout plus simple à la relecture
pour la maintenance de l'application un an après...

Je pense aussi qu'il y a moyen de dé-enregistré la procédure qui sera
appelée par un événement donné pour un objet donné de manière dynamique.
Qui sais comment ?

Bye,
Alain.






"Vincent Poyo"
Bonjour,

tu peux toujours utiliser un flag (booléen) pour simuler ca.

avant de changer la valeur, tu passes ton booléen a false puis après tu
le remets a true.
et au début de la méthode qui gère l'évènement, un petit if mon_boolen =
false then return.

peut être rajouter également un petit DoEvents() avant de remettre ton
booléen à true, histoire de t'assurer que l'appel à la méthode d'event a
été faite.



"Alain" news:
Bonjour à toutes et à tous.

Je développe en VB sous .NET une petite application Windows.
Je souhaite suspendre le déclenchement d'un événement donné pour un des
objets de mon interface graphique de manière temporaire.
Voici pourquoi:
J'ai un DateTimePicker.
Lorque l'utilisateur en modifie la valeur, je dois faire un traitement.
J'utilise donc l'événement ValueChanged de mon DateTimePicker pour
démarrer le traitement ad hoc.
Au début de ce traitement, je vérifie la valeur de mon DateTimePicker
et, si nécessaire, je la modifie mais il ne faut pas à ce moment que
l'événement ValueChanged soit déclenché à nouveau!
Je souhaite donc suspendre le déclenchement du ValueChanged juste le
temps qu'il me faut pour corriger éventuellement la valeur en question.

Suis-je clair?
Avez-vous une idée?

Merci d'avance,
Alain. (Belgique)















Alain
Le #12202981
Merci à tous.
Je vais investiguer les fonctions Remove/AddHanler.
Je préfère ça au booléen; question de goût de programmeur.

Bonne journée,
Alain.




"Vincent Poyo"
Je pensais que le booléen était plus simple justement.

sinon regarde du coté des opérateurs RemoveHandler et AddHandler
qui est l'équivalent VB du c# avec les opérateur -= et += pour les events.

ca devrait donner un truc du style :

RemoveHandler monDateTimePicker.ValueChanged, AddressOf
Me.monDateTimePicker_ValueChanged
//mon traitement
AddHandler monDateTimePicker.ValueChanged, AddressOf
Me.monDateTimePicker_ValueChanged

"Stéphane" news:
Bonjour Alain,

Pour avoir déjà eu ce problème, j'ai appliqué la même méthode qu'a décrit
Vincent.

S'il ne s'agit que de faciliter la lecture du code, notamment pour la
maintenance, il suffit tout simplement de bien commenter.

Un commentaire quand tu flaggues ton booléen :
'la variable booléenne mise_a_jour_en_cours est mise à vrai
'pour ne pas relancer le traitement sur l'évènement après mise à jour du
contrôle mon_controle ci-dessous
'puis la variable est remise à faux une fois les mises à jour effectuées
mise_a_jour_en_cours=true
mon_controle1=ma_donnée1
mon_controle2=ma_donnée2
mise_a_jour_en_coursúlse

Et un autre commentaire au début de l'événement en question :
'Vérification s'il s'agit d'une mise à jour de l'utilisateur ou du
programme
'la variable booléenne mise_a_jour_en_cours est mise à vrai dans les
procédures ma_procédure1 et ma_procédure2
'si tel est le cas, le traitement ci-dessous ne doit pas se lancer
if mise_a_jour_en_cours then
'traitement
end if


Stéphane.


"Alain"
Merci pour ta réponse.

Oui, j'avais pensé à un booléen mais ça devient un peu trop compliqué
pour moi.

J'ai déjà développé des macros en VB sous Excel et là il est possible de
suspendre un événement.
C'est bien plus simple à écrire et surtout plus simple à la relecture
pour la maintenance de l'application un an après...

Je pense aussi qu'il y a moyen de dé-enregistré la procédure qui sera
appelée par un événement donné pour un objet donné de manière dynamique.
Qui sais comment ?

Bye,
Alain.






"Vincent Poyo"
Bonjour,

tu peux toujours utiliser un flag (booléen) pour simuler ca.

avant de changer la valeur, tu passes ton booléen a false puis après tu
le remets a true.
et au début de la méthode qui gère l'évènement, un petit if mon_boolen
= false then return.

peut être rajouter également un petit DoEvents() avant de remettre ton
booléen à true, histoire de t'assurer que l'appel à la méthode d'event
a été faite.



"Alain" news:
Bonjour à toutes et à tous.

Je développe en VB sous .NET une petite application Windows.
Je souhaite suspendre le déclenchement d'un événement donné pour un
des objets de mon interface graphique de manière temporaire.
Voici pourquoi:
J'ai un DateTimePicker.
Lorque l'utilisateur en modifie la valeur, je dois faire un
traitement.
J'utilise donc l'événement ValueChanged de mon DateTimePicker pour
démarrer le traitement ad hoc.
Au début de ce traitement, je vérifie la valeur de mon DateTimePicker
et, si nécessaire, je la modifie mais il ne faut pas à ce moment que
l'événement ValueChanged soit déclenché à nouveau!
Je souhaite donc suspendre le déclenchement du ValueChanged juste le
temps qu'il me faut pour corriger éventuellement la valeur en
question.

Suis-je clair?
Avez-vous une idée?

Merci d'avance,
Alain. (Belgique)


















Publicité
Poster une réponse
Anonyme