Textbox nombre

[Résolu]
Signaler
Messages postés
8
Date d'inscription
mercredi 10 juin 2009
Statut
Membre
Dernière intervention
26 janvier 2013
-
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
-
Bonjour,

Alors voila j'ai un petit problème avec un programme que j'ai fais. Le principe est tel que :

L'utilisateur vient saisir un nombre dans une textBox, puis un autre nombre dans une autre TextBox. Ensuite il vient cliquer sur un bouton_click.

Dans ce bouton click je fais :

Si a<b alors j'affiche un message dans une MsgBox.

J'ai bien déclaré mes variables a et b en public pour quelles soient utilisées par toutes les procédures. Et fait dans la procédure de chaque TextBox :

a = Cint(TextBox.Text)

et

b = Cint(TextBox.Text)

afin de convertir une chaine en nombre.

Mon programme fonctionne tres bien, mais le seul hic c'est que dés que je tape un caractère, au lieux d'un chiffre ou un espace bref un caractère alors le programme plante.

J'ai lu qu'il fallait filtres les infos pour ne pas tenir compte de donnée qui n'est pas rapport avec le code.

Mais comment le faire?

Merci

Bye +++

10 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
ta méthode n'est pas bonne non :
*tu testes toute la zone à chaque pression, alors que logiquement, tu as déjà "presque tout testé" à la pression précédente
*si l'utilisateur fait une simple faute de frappe? 123465789g
arrivé au g, tout sera vidé

tu as pris un exemple VB6 alors que tu es en VB.NET

je viens de traduire le lien de tout à l'heure

copie le code ci-dessous dans un module (projet > ajouter un module) que tu nommeras "modNumericBox", et applique l'exemple indiqué en section "remarques"



<hr />
'    TEXTBOX NUMERIQUE SEULEMENT
'    http://www.codyx.org/snippet_textbox-numerique-seulement_53.aspx#2382
'    Posté par [ PCPT ] le 02/07/2009
<hr />





Module modNumericBox
    Private Const ES_NUMBER As Integer = &H2000
    Private Const GWL_STYLE As Integer = -16
    <System.Runtime.InteropServices.DllImportAttribute("user32.dll", SetLastError:=True)> _
    Private Function GetWindowLong(ByVal hwnd As IntPtr, ByVal nIndex As Integer) As Integer
    End Function
    <System.Runtime.InteropServices.DllImportAttribute("user32.dll", SetLastError:=True)> _
    Private Function SetWindowLong(ByVal hwnd As IntPtr, ByVal nIndex As Integer, ByVal dwNewLong As Integer) As Integer
    End Function

    Public Sub SetTextBoxNum(ByRef Obj As Object)
        If (TypeOf Obj Is System.Windows.Forms.TextBox) Then
            SetWindowLong(Obj.Handle, GWL_STYLE, GetWindowLong(Obj.Handle, GWL_STYLE) Or ES_NUMBER)
        End If
    End Sub
End Module





'----------------------------------------------------------------



'Remarques :


'dans le form_load
:
'modNumericBox.SetTextBoxNum(TextBox1)
'modNumericBox.SetTextBoxNum(TextBox2)
'
'selon
les paramètres de votre projet et la version de VS, lors de la saisie d'une
valeur non numérique, une popup (tooltip) exclamation apparaitra









voici un aperçu du résultat depuis VS2008

++
Messages postés
267
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
26 novembre 2013
2
Bonjour,

Avant d'effectuer ton traitement (a
Les machines ne font pas d'erreurs
Heureusement nous sommes humains
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
salut,

tu peux adapter le code ci-dessous pour simplement forcer la saisie numérique
http://www.codyx.org/snippet_textbox-numerique-seulement_53.aspx#139

++

<hr size="2" width="100%" />
Messages postés
8
Date d'inscription
mercredi 10 juin 2009
Statut
Membre
Dernière intervention
26 janvier 2013

Ok, je vais essayer sa ce soir alors, et merci pour les conseils !

Bye +++
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
Plus facile d'utiliser la solution par APIs proposée par [../auteur/PCPT/401740.aspx PCPT] ...
Messages postés
8
Date d'inscription
mercredi 10 juin 2009
Statut
Membre
Dernière intervention
26 janvier 2013

Bonsoir tous le monde,

Alors j'ai adapter le texte pour la toute première réponse et visual ne reconnait pas setfocus ou il me met un message d'erreur. J'ai pourtant bien déclarer les variables mais rien a faire.

J'ai tester le code en API mais c'est encorre pire, je pense que je ne dois pas le recopier au bon endroit.

Je suis débutant, c'est peut être pour sa que je bloc sur des choses de ce type, bref .J'apprends avec vb.net pour les nuls c'est tres bien mais il  y a quelques infos comme le problème que j'énonce qui n'est pas assez approfondie. Quand je cherche sur le net il y a des morceaux de code énorme juste pour dire NON au lettre ou caractère, j'aurai pas pensé lol. J'ai donc adapté mon code et je voulais avoir votre avis.

Voici mon code et qui fonctionne correctement, la partie clear me permettre d'éviter toute saisie de caractère evitant ainsi les beugs. Dites moi si la façon de faire est mauvaise. Je me suis inspiré du site :
http://faq.vb.free.fr/index.php?question=80

Private

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

If
Not IsNumeric(TextBox1.Text)
ThenTextBox1.Clear()

' MsgBox("Veuillez entrer un nombre !") beug l'affiche une seconde fois au second clik sur OK

End
If

End
Sub
Bonne soirée
Messages postés
8
Date d'inscription
mercredi 10 juin 2009
Statut
Membre
Dernière intervention
26 janvier 2013

Alors j'ai fais comme tu m'a expliqué et sa tourne comme sur des roulettes! Je suppose que le code dans le module faut pas chercher à trop comprendre toutes les lignes car la j'ai ren appris de ce genre pour le moment?

Il y a encorre un beug, quand l'utilisateur ne tape rien et fait entrée mais c'est un autre problème, je me débrouillerai.

Merci pour l'aide.
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
(pense à valider la ou les bonnes réponses si le problème est résolu)






"

Je suppose que le code dans le module faut pas chercher à trop comprendre

"
bin à part ce code, je ne vois pas quel autre code tu pourrais avoir envie de comprendre dans ce cas :) ....

une textbox est une fenêtre, avec un style
c'est windows qui le gère
par chance, windows gère plusieurs styles
on lui demande donc juste d'ajouter à la textbox le message enpêchant la saisie autre que numérique, définie par la constante


ES_NUMBER







demande si c'est pas clair

"

quand l'utilisateur ne tape rien et fait entrée

"
à toi de vérifier que les zones ne sont pas vides, lors du _click (ou du _keypress enter)

if (TextBox1.TextLength>0) andalso (TextBox2.TextLength>0) then
TONCODE
endif

++

<hr size="2" width="100%" />
Messages postés
8
Date d'inscription
mercredi 10 juin 2009
Statut
Membre
Dernière intervention
26 janvier 2013

Tu plaisantes quand tu dit c'est le seul code à comprendre ? lol . Comme je disais je débute et pour le moment il y a pas mal de terme et d'expression que je ne connais pas comme par exemple :

 Private Const ES_NUMBER As Integer = &H2000
    Private Const GWL_STYLE As Integer = -16

ou

<System.Runtime.InteropServices.DllImportAttribute("user32.dll", SetLastError:=True)> _

Les valeurs attribués, l'utilisation de certaine nomination "DLLImportAttribute" et pas mal de partie. Je suppose que cela viendra avec le temps du moin gespere, la le livre pour les nuls m'a beaucoup aidé mais il ne parle pas de ce genre de problème ou de manière de l'écrire.

Je pense me diriger vers le livre visual basic.net étape par étape, sa l'air d'etre un livre assez complet.

Merci en tout cas pour votre aide.
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
14
Les lignes PortéeConstNomAsType=Valeur définissent une constante : un genre de variable codée en dur et comme son nom l'indique, ne pouvant pas être modifiée.