Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

evenement change d'un textbox

11 réponses
Avatar
Flex
salut tout le monde
comment peut on differencier l'evenement change d'un texbox dans les 2 cas
suivants:
1. changement de valeur par l'utilisateur
2. changement de valeur du à un calcul effectué en amont

merci

10 réponses

1 2
Avatar
Quasimodo
Flex submitted this idea :
salut tout le monde
comment peut on differencier l'evenement change d'un texbox dans les 2 cas
suivants:
1. changement de valeur par l'utilisateur
2. changement de valeur du à un calcul effectué en amont

merci



bonjour,
si vous avez la main sur le code source, vous raiser un évenement ou
vous affecter une valeur true à un booleen, lorsque vous calculez une
valeur qui va être affecter à la textebox et c'est caisse. Sinon vous
devez utiliser les api, si vous n'avez pas la main sur le code source.

@+Quaz

--
This is an automatic signature of MesNews.
Site : http://mesnews.no-ip.com
Avatar
Flex
Merci
Mais tu peux developper un peu plus car j'ai pas tout compris
Merci

"Quasimodo" a écrit dans le message de news:

Flex submitted this idea :
salut tout le monde
comment peut on differencier l'evenement change d'un texbox dans les 2
cas suivants:
1. changement de valeur par l'utilisateur
2. changement de valeur du à un calcul effectué en amont

merci



bonjour,
si vous avez la main sur le code source, vous raiser un évenement ou vous
affecter une valeur true à un booleen, lorsque vous calculez une valeur
qui va être affecter à la textebox et c'est caisse. Sinon vous devez
utiliser les api, si vous n'avez pas la main sur le code source.

@+Quaz

--
This is an automatic signature of MesNews.
Site : http://mesnews.no-ip.com



Avatar
Zoury
Salut!

Mais tu peux developper un peu plus car j'ai pas tout compris



Yep! Voici un exemple applicant les techniques énoncé mais pour un contrôle
de type ComboBox.
http://groups.google.com/groups?threadm=OoYQBGkFDHA.4048%40tk2msftngp13.phx.gbl


--
Cordialement
Yanick Lefebvre
MVP pour Visual Basic
Avatar
Flex
Merci pôur l'info
Apres avoir regardé l'exemple c'est déja plus clair dans ma tete.
Merci à tous les deux

"Zoury" a écrit dans le message de news:

Salut!

Mais tu peux developper un peu plus car j'ai pas tout compris



Yep! Voici un exemple applicant les techniques énoncé mais pour un
contrôle
de type ComboBox.
http://groups.google.com/groups?threadm=OoYQBGkFDHA.4048%40tk2msftngp13.phx.gbl


--
Cordialement
Yanick Lefebvre
MVP pour Visual Basic




Avatar
Flex
Re Salut
En fait je pensais avoir capté mais je crois que mon niveau est encore trop
faible,
alors je vous explique avec plus de détails.

Voila je suis en train de développer un soft qui permettra de créer des
devis et des factures. Sur ma form frm_devis j'ai une flexgrid. quand
l'utilisateur y ajoute les articles il y a un calcul du total HT qui se fait
automatiquement et qui apparait dans un label lbl_TotalHT. l'utilisateur
peut entrer dans un textbox txt_remise une eventuelle remise, alors il
s'ensuit un nouveau calcul dont le resultat apparait dans lbl_ResultTotal.
Ce calcul prend en compte la valeur saisie ds txt_remis et lbl_TotalHT. Le
pb se pose si une saisie dans txt_remise est effectuée alors qu'aucun
article n'a été choisie(=>lbl_TotalHT vaut vide).
Ma question c'est comment faire pour pas effectué le calcul si lbl_TotalHT
est vide quand l'utilisateur entre une remise et qu'aucun article n'a été
saisi.
J'ai vu qu'on pouvait utiliser l'api sendmessage avec le message
CB_SETCURSEL (merci Zoury, lol) qui permettrait de programmer l'evenement
change du textbox mais je ne sais pas comment faire.
Donc je vous demande votre aide s'il vous plait.
Merci
Cordiallement
Flex







"Zoury" a écrit dans le message de news:

Salut!

Mais tu peux developper un peu plus car j'ai pas tout compris



Yep! Voici un exemple applicant les techniques énoncé mais pour un
contrôle
de type ComboBox.
http://groups.google.com/groups?threadm=OoYQBGkFDHA.4048%40tk2msftngp13.phx.gbl


--
Cordialement
Yanick Lefebvre
MVP pour Visual Basic




Avatar
jean_marc_n2
"Flex" wrote in message news:...
Re Salut
En fait je pensais avoir capté mais je crois que mon niveau est encore trop
faible,
alors je vous explique avec plus de détails.


<snip>

Hello,

On peut par exemple faire comme ceci:
Text1 est le textBox que tu surveilles, Text2 est
juste la pour l'exemple pour prouver que mon truc
marche. Ce programme nécessite une form et 2 textbox:

Option Explicit
Dim user_did_it As Boolean

Private Sub Command1_Click()
Text1.Text = "aaa" & Str$(Int(Rnd * 1000))
End Sub

Private Sub Text1_Change()
If user_did_it Then
' l'utilisateur a fait quelque chose
user_did_it = False
Text2.Text = "user"
Else
' un evenement externe s'est produit
Text2.Text = "externe"
End If
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
user_did_it = True
End Sub

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
Avatar
Flex
Merci Jean Marc
j'ai effectivement essayé ton code mais mon cas est un peu different.
je m'explique:

Contenu de ma form:
1 flerxgrid : flx_grille_tarifs
1 textbox: txtRemiseEuros(remise en ?)
1 textbox: txt_remisePct (remise en %)
1 label: lbl_tot_HT (total HT)

au debut: y'a rien dans la propriété caption du label
quand on ajoute des articles alors le total HT apparait dans
lbl_tot_ht.caption
ce que je veux:
j'ajoute une remise en euros (resp. en %) dans txtRemiseEuros(resp.
txt_remisePct) et l'équivalent de la remise en pourcent (resp. en euros)
apparait dans txt_remisePct (resp. txtRemiseEuros)
Le probleme: si on rentre une remise en ? ou % quand y'a pas d'article ca
plante
car lbl_tot_ht est vide
voici ce que j'ai fait:

Private Sub txtRemiseEuros_Change()
Dim tmp_RemiseEuros As Double
Dim tmp_HT As Double
If lbl_tot_brutHT.Caption<>"" Then
tmp_RemiseEuros = Format(CDbl(Val(txtRemiseEuros)), "0.00")
tmp_HT = Val(lbl_tot_brutHT.Caption)
txtRemiseEnPourcent.Text = Format(CDbl(tmp_RemiseEuros * 100) /
tmp_HT)
End If
End Sub

Bien sur sa plante si ya pas d'article

Un peu d'aide s'il vous plait
Merci







"Jean_marc" a écrit dans le message de news:

"Flex" wrote in message
news:...
Re Salut
En fait je pensais avoir capté mais je crois que mon niveau est encore
trop
faible,
alors je vous explique avec plus de détails.


<snip>

Hello,

On peut par exemple faire comme ceci:
Text1 est le textBox que tu surveilles, Text2 est
juste la pour l'exemple pour prouver que mon truc
marche. Ce programme nécessite une form et 2 textbox:

Option Explicit
Dim user_did_it As Boolean

Private Sub Command1_Click()
Text1.Text = "aaa" & Str$(Int(Rnd * 1000))
End Sub

Private Sub Text1_Change()
If user_did_it Then
' l'utilisateur a fait quelque chose
user_did_it = False
Text2.Text = "user"
Else
' un evenement externe s'est produit
Text2.Text = "externe"
End If
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
user_did_it = True
End Sub

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."


Avatar
Jean-Marc
"Flex" a écrit dans le message de
news:
Merci Jean Marc
j'ai effectivement essayé ton code mais mon cas est un peu different.
je m'explique:

Contenu de ma form:
1 flerxgrid : flx_grille_tarifs
1 textbox: txtRemiseEuros(remise en ?)
1 textbox: txt_remisePct (remise en %)
1 label: lbl_tot_HT (total HT)

au debut: y'a rien dans la propriété caption du label
quand on ajoute des articles alors le total HT apparait dans
lbl_tot_ht.caption
ce que je veux:
j'ajoute une remise en euros (resp. en %) dans txtRemiseEuros(resp.
txt_remisePct) et l'équivalent de la remise en pourcent (resp. en euros)
apparait dans txt_remisePct (resp. txtRemiseEuros)
Le probleme: si on rentre une remise en ? ou % quand y'a pas d'article ca
plante
car lbl_tot_ht est vide
voici ce que j'ai fait:

Private Sub txtRemiseEuros_Change()
Dim tmp_RemiseEuros As Double
Dim tmp_HT As Double
If lbl_tot_brutHT.Caption<>"" Then
tmp_RemiseEuros = Format(CDbl(Val(txtRemiseEuros)), "0.00")
tmp_HT = Val(lbl_tot_brutHT.Caption)
txtRemiseEnPourcent.Text = Format(CDbl(tmp_RemiseEuros * 100) /
tmp_HT)
End If
End Sub

Bien sur sa plante si ya pas d'article



Hello,

Je ne vois pas pourquoi ça planterait.
Ton test sur lbl_tot_brutHT.Caption<>""
a l'air ok. Peux tu préciser le "ça plante":
- Sur quelle ligne ?
- Quel message d'erreur ?

Je ne vois pas le problème. En réalité, je vois un problème,
mais c'est un probleme de design global: ton interface est
"trop" interactive. Il est plus sain de différencier:
- les entrées
- les calculs

Plutot que de vouloir tout faire à la volée, moi ce que je ferais:

1. Je rendrais Enable txtRemiseEuros et txtRemisePct uniquement si
il y a un article

2. Je ne coderais rien sur _Change, mais je ferais un calcul global
par action sur un bouton de commande. A ce moment, tu peux tester en
séquence que toutes les conditions pour faire le calcul sont remplies,
puis seulement tu calcules.

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
Avatar
Flex
Merci

l'erreur est la suivante: j'obtiens une erreur : division par zéro.
parce que Val(lbl_tot_brutHT.Caption) vaut 0
apparemment rien dans un label equivaut à label.caption=vide donc val
retourne 0
merci encore

"Jean-Marc" a écrit dans le message de news:
418e3ba0$0$15715$
"Flex" a écrit dans le message de
news:
Merci Jean Marc
j'ai effectivement essayé ton code mais mon cas est un peu different.
je m'explique:

Contenu de ma form:
1 flerxgrid : flx_grille_tarifs
1 textbox: txtRemiseEuros(remise en ?)
1 textbox: txt_remisePct (remise en %)
1 label: lbl_tot_HT (total HT)

au debut: y'a rien dans la propriété caption du label
quand on ajoute des articles alors le total HT apparait dans
lbl_tot_ht.caption
ce que je veux:
j'ajoute une remise en euros (resp. en %) dans txtRemiseEuros(resp.
txt_remisePct) et l'équivalent de la remise en pourcent (resp. en euros)
apparait dans txt_remisePct (resp. txtRemiseEuros)
Le probleme: si on rentre une remise en ? ou % quand y'a pas d'article ca
plante
car lbl_tot_ht est vide
voici ce que j'ai fait:

Private Sub txtRemiseEuros_Change()
Dim tmp_RemiseEuros As Double
Dim tmp_HT As Double
If lbl_tot_brutHT.Caption<>"" Then
tmp_RemiseEuros = Format(CDbl(Val(txtRemiseEuros)), "0.00")
tmp_HT = Val(lbl_tot_brutHT.Caption)
txtRemiseEnPourcent.Text = Format(CDbl(tmp_RemiseEuros * 100) /
tmp_HT)
End If
End Sub

Bien sur sa plante si ya pas d'article



Hello,

Je ne vois pas pourquoi ça planterait.
Ton test sur lbl_tot_brutHT.Caption<>""
a l'air ok. Peux tu préciser le "ça plante":
- Sur quelle ligne ?
- Quel message d'erreur ?

Je ne vois pas le problème. En réalité, je vois un problème,
mais c'est un probleme de design global: ton interface est
"trop" interactive. Il est plus sain de différencier:
- les entrées
- les calculs

Plutot que de vouloir tout faire à la volée, moi ce que je ferais:

1. Je rendrais Enable txtRemiseEuros et txtRemisePct uniquement si
il y a un article

2. Je ne coderais rien sur _Change, mais je ferais un calcul global
par action sur un bouton de commande. A ce moment, tu peux tester en
séquence que toutes les conditions pour faire le calcul sont remplies,
puis seulement tu calcules.

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."




Avatar
Jean-Marc
"Flex" a écrit dans le message de
news:
Merci

l'erreur est la suivante: j'obtiens une erreur : division par zéro.
parce que Val(lbl_tot_brutHT.Caption) vaut 0
apparemment rien dans un label equivaut à label.caption=vide donc val
retourne 0



Nous arrivons donc à des choses intéressantes. Ici, la
solution est toute trouvée (si tu ne veux pas changer le
design applicatif) :

Private Sub txtRemiseEuros_Change()
Dim tmp_RemiseEuros As Double
Dim tmp_HT As Double

' anticiaption du calcul exact de lbl_tot_brutHT
tmp_HT = cdbl(Val(lbl_tot_brutHT.Caption))
' test de vraissemblance
If tmp_HT<>0.0 Then
' calcul effectif
tmp_RemiseEuros = Format(CDbl(Val(txtRemiseEuros)), "0.00")
txtRemiseEnPourcent.Text = Format(CDbl(tmp_RemiseEuros * 100) /
tmp_HT)
End If
End Sub


Tu n'as plus qu'à ajouter à ceci le petit truc que je donnais
dans un post précédent pour savoir si c'est une modification
utilisateur ou calculée.
Si tu détectes ici une entrée utilisateur alors que tmp_HT calculée
est vide, tu n'a plus qu'à gérer ça proprement: message d'avertissement,
RAZ du TextBox, etc.

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
1 2