Affichage dans TextBox Non numérique ou -Infini ou +Infini

Résolu
cs_Sipat Messages postés 71 Date d'inscription mardi 26 octobre 2004 Statut Membre Dernière intervention 15 avril 2007 - 12 avril 2007 à 18:36
cs_Sipat Messages postés 71 Date d'inscription mardi 26 octobre 2004 Statut Membre Dernière intervention 15 avril 2007 - 15 avril 2007 à 21:11
Bonjour,
Je viens de me rendre compte qu'il s'affiche suivant le calcul :
Non numérique ... quand je saisie un zéro..., alors pour y remedier je fais cela :
If Mid(TextBox11.Text, 1, 3) =
"Non"
Then TextBox11.Text =
"0"If Mid(TextBox11.Text, 1, 7) "-Infini"Then TextBox11.Text "0"If Mid(TextBox11.Text, 1, 7) "+Infini"Then TextBox11.Text "0"
Je voulais vous demandez  s'il falait faire comme cela ?
Une autre solution.
Pour empêcher le double zéro je pensais à ajouter une ligne la :
Private
Sub TextBox2_KeyPress(
ByVal sender
As
Object,
ByVal e
As System.Windows.Forms.KeyPressEventArgs)
Handles TextBox2.KeyPress

'remplacement du point par une virgule
If Asc(e.KeyChar) = 46
Then e.KeyChar = Chr(44)
'","
'si c'est une virgule et qu'il y en a déja une dans le textbox, ou qu'elle est tappé en premier caractère, on annule la saisie
If Asc(e.KeyChar) = 44
And (
CType(sender, TextBox).Text.IndexOf(
",") > 0
Or
CType(sender, TextBox).Text =
"")
Then e.Handled =
True
'si le caractere n'est pas un chiffre, back ou une virgule, on annule
If
Char.IsDigit(e.KeyChar) =
False
And Asc(e.KeyChar) <> System.Windows.Forms.Keys.Back
And Asc(e.KeyChar) <> 44
Then e.Handled =
True
End
Sub

mais je n'y arrive pas (J'arrive qu'a supprimer totalement l'appuis  sur 0 !)
Avez-vous une idée ?
Merci.

6 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
13 avril 2007 à 18:43
Salut
C'est plus clair, en effet.
Un double zéro en tête de zone de texte, c'est facile à repérer.
Tu le fais déjà pour la saisie d'un virgule en tête de champ (*)
Il te suffit d'extrapoler :
      'si c'est encore un zéro et qu'il y en a déja un dans le textbox, on annule la saisie 
      If e.KeyChar = "0" And TextBox1.Text="0" Then e.Handled =
True
Ca devrait suffire, non ?

(*) Annulation d'une virgule en tête : Pourquoi ?
Cela fait partie des normes généralement autorisées (voir Calculette ou Excel)
Il vaudrait mieux dire que si la virgule est repérée en tant que premier caractère, on insère un 0 devant, ça serait plus logique.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
15 avril 2007 à 19:56
Re
Bah, si ça fonctionne, laisse comme ça, mais il serait utile d'utiliser un Select Case :
Select Case True   Case (Mid(TextBox11.Text, 1, 3) "Non"), (Mid(TextBox11.Text, 1, 7) "-Infini"), (Mid(TextBox11.Text, 1, 7) = "+Infini")
         TextBox11.Text = "0"
   Case Else
         TextBox11.Text = CStr(System.Math.Round(CDbl(TextBox11.Text), 2))
End Select

Ne retiens que l'idée, je n'ai pas tester la syntaxe : ADSP (à démerder sur place)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 avril 2007 à 18:59
Salut
Ta question est incompréhensible.
Tu travailles sur ton projet et tu sais de quoi tu parles, mais nous, on n'en sait rien.
Alors éclaircis les choses.
Tu parles d'infini, de double zéro, de non numérique ....

Comme une rédaction en français :
Introduction : Dans quel contexte, ce que tu cherches à faire
Développement : Tu expliques ce que tu as déjà fait
Conclusion : ta question

Parce qu'une phrase qui commence par "Je viens de me rendre compte" ne nous aide pas vraiment
Merci
0
cs_Sipat Messages postés 71 Date d'inscription mardi 26 octobre 2004 Statut Membre Dernière intervention 15 avril 2007
12 avril 2007 à 20:50
Bonsoir,
Excuser-moi pour le charabia...
- Introduction : Dans quel contexte, ce que tu cherches à faire
Je veux faire calculer TextBox1 et  TextBox2 ensemble et recuperer le resultat sur un troisieme TexBox11
- Développement : Tu expliques ce que tu as déjà fait
Voilà ce que j'ai fais :


Private
Sub TextBox1_GotFocus(
ByVal sender
As
Object,
ByVal e
As System.EventArgs)
Handles TextBox1.GotFocus
TextBox1.SelectionLength = 0

End
Sub

Private
Sub TextBox1_KeyPress(
ByVal sender
As
Object,
ByVal e
As System.Windows.Forms.KeyPressEventArgs)
Handles TextBox1.KeyPress

'remplacement du point par une virgule
If Asc(e.KeyChar) = 46
Then e.KeyChar = Chr(44)
'","
'si c'est une virgule et qu'il y en a déja une dans le textbox, ou qu'elle est tappé en premier caractère, on annule la saisie
If Asc(e.KeyChar) = 44
And (
CType(sender, TextBox).Text.IndexOf(
",") > 0
Or
CType(sender, TextBox).Text =
"")
Then e.Handled =
True
'si le caractere n'est pas un chiffre, back ou une virgule, on annule
If
Char.IsDigit(e.KeyChar) =
False
And Asc(e.KeyChar) <> System.Windows.Forms.Keys.Back
And Asc(e.KeyChar) <> 44
Then e.Handled =
True
End
Sub

Private
Sub TextBox1_KeyUp(
ByVal sender
As
Object,
ByVal e
As System.Windows.Forms.KeyEventArgs)
Handles TextBox1.KeyUp

If TextBox1.Text <>
"" =
True
And TextBox2.Text <>
""
Then TextBox11.Text =
CStr((
CDbl(TextBox2.Text) -
CDbl(TextBox1.Text)) /
CDbl(TextBox2.Text) * 100)

End
If
End
Sub

Private
Sub TextBox1_TextChanged(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles TextBox1.TextChanged

If IsNumeric(TextBox1.Text) =
True
Then
If TextBox1.Text =
""Then TextBox1.Text "" : TextBox11.Text
""

ElseTextBox1.Text "" : TextBox11.Text
""

End
If
End
Sub



Private






Sub
TextBox2_KeyPress(

ByVal
sender

As



Object
,

ByVal
e

As
System.Windows.Forms.KeyPressEventArgs)

Handles
TextBox2.KeyPress


'remplacement du point par une virgule

If
Asc(e.KeyChar) = 46

Then
e.KeyChar = Chr(44)

'","

'si c'est une virgule et qu'il y en a déja une dans le textbox, ou qu'elle est tappé en premier caractère, on annule la saisie

If
Asc(e.KeyChar) = 44

And
(

CType
(sender, TextBox).Text.IndexOf(

","
) > 0

Or



CType
(sender, TextBox).Text =

""
)

Then
e.Handled =

True

'si le caractere n'est pas un chiffre, back ou une virgule, on annule

If



Char
.IsDigit(e.KeyChar) =

False



And
Asc(e.KeyChar) <> System.Windows.Forms.Keys.Back

And
Asc(e.KeyChar) <> 44

Then
e.Handled =

True

End



Sub






Private



Sub
TextBox2_KeyUp(

ByVal
sender

As



Object
,

ByVal
e

As
System.Windows.Forms.KeyEventArgs)

Handles
TextBox2.KeyUp


EndSub














Private



Sub
TextBox2_TextChanged(

ByVal
sender

As
System.Object,

ByVal
e

As
System.EventArgs)

Handles
TextBox2.TextChanged


' If Mid(TextBox2.Text, 1, 2) "00" Then TextBox2.Text "" 's'il y a saisie deux 00 alors efface

If
IsNumeric(TextBox2.Text) =

True



Then

   If
TextBox2.Text =

""



Then
TextBox11.Text =

""





       TextBox11.Text =

CStr
((

CDbl
(TextBox2.Text) -

CDbl
(TextBox1.Text)) /

CDbl
(TextBox2.Text) * 100)









Else

   If
IsNumeric(TextBox2.Text) =

False



Then
TextBox2.Text =

""
: TextBox11.Text =

""








End



If

End



Sub

Private






Sub
TextBox11_TextChanged(

ByVal
sender

As
System.Object,

ByVal
e

As
System.EventArgs)

Handles
TextBox11.TextChanged


' Dim toto As String

' MsgBox(TextBox11.Text)

' toto = Mid(TextBox11.Text, 1, 3)

' If Mid(TextBox11.Text, 1, 2) "00" Then TextBox11.Text "0"

'If Mid(TextBox11.Text, 1, 7) "-Infini" Then TextBox11.Text "0"

'If Mid(TextBox11.Text, 1, 3) "Non" Then TextBox11.Text "0"

If
TextBox11.Text <>

""
=

True



Then

TextBox11.Text =

CStr
(System.Math.Round(

CDbl
(TextBox11.Text), 2))


End



If

End



Sub

- Conclusion : ta question
Comment eviter la saisie de deux zero qui se suivent au debut (style 0012)
Je voulais vous demandez  s'il falait faire comme cela pour eviter que dans certaines conditions le TexBox11 affiche  le texte suivant (Non numérique ou -Infini ou +Infini)?
If Mid(TextBox11.Text, 1, 3) "Non"Then TextBox11.Text "0"If Mid(TextBox11.Text, 1, 7) "-Infini"Then TextBox11.Text
"0"If Mid(TextBox11.Text, 1, 7) "+Infini"Then TextBox11.Text
"0"

Pour le double zero peut être serait 'il possible d'ajouter une ligne dans KeyPress ?
Merci, bonne soirée.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Sipat Messages postés 71 Date d'inscription mardi 26 octobre 2004 Statut Membre Dernière intervention 15 avril 2007
14 avril 2007 à 08:58
Bonjour,
Je viens d'ajouter la ligne ça fonctionne bien pour le double zéro en tête de zone de texte.
Et pour ce qui est de  l'affichage ... dans certaines conditions le TexBox11 affiche  le texte suivant (Non numérique ou -Infini ou +Infini)?
J'ai ajouté les lignes suivantes dans TextBox11_TextChanged
If Mid(TextBox11.Text, 1, 3) "Non"Then TextBox11.Text
"0"If Mid(TextBox11.Text, 1, 7) "-Infini"Then TextBox11.Text
"0"If Mid(TextBox11.Text, 1, 7) "+Infini"Then TextBox11.Text
"0"

SubTextBox11_TextChanged(
ByValsender
AsSystem.Object,
ByVale
AsSystem.EventArgs)
HandlesTextBox11.TextChangedIf Mid(TextBox11.Text, 1, 3) "Non"Then TextBox11.Text "0"If Mid(TextBox11.Text, 1, 7) "-Infini"Then TextBox11.Text
"0"If Mid(TextBox11.Text, 1, 7) "+Infini"Then TextBox11.Text
"0"

IfTextBox11.Text <>
""=
True
Then
TextBox11.Text = CStr(System.Math.Round(
CDbl(TextBox11.Text), 2))
End
If
End
Sub


Je voulais vous demander s'il fallait faire comme cela pour éviter l'affichage de Non numérique ou -Infini ou +Infini dans TextBox11 ou peut être qu'il y a une autre solution ?
Merci,bonne journée
0
cs_Sipat Messages postés 71 Date d'inscription mardi 26 octobre 2004 Statut Membre Dernière intervention 15 avril 2007
15 avril 2007 à 21:11
Bonsoir,
J'ai ajouté cela :
Private

Sub TextBox11_TextChanged(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles TextBox11.TextChanged

Select
Case
True
Case (Mid(TextBox11.Text, 1, 3) "Non"), (Mid(TextBox11.Text, 1, 7) "-Infini"), (Mid(TextBox11.Text, 1, 7) "+Infini")TextBox11.Text

"0"

Case
Else

If TextBox11.Text <>
"" =
True
Then TextBox11.Text =
CStr(System.Math.Round(
CDbl(TextBox11.Text), 2))

End
Select
End

Sub
Merci, bonne soirée.
0
Rejoignez-nous