Sunnydelight
Messages postés8Date d'inscriptionmercredi 10 juin 2009StatutMembreDernière intervention26 janvier 2013
-
1 juil. 2009 à 11:50
cs_ghuysmans99
Messages postés3982Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 2013
-
3 juil. 2009 à 19:36
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.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 2 juil. 2009 à 01:41
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"
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
'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
Sunnydelight
Messages postés8Date d'inscriptionmercredi 10 juin 2009StatutMembreDernière intervention26 janvier 2013 2 juil. 2009 à 00:53
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
Sunnydelight
Messages postés8Date d'inscriptionmercredi 10 juin 2009StatutMembreDernière intervention26 janvier 2013 2 juil. 2009 à 19:31
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.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 2 juil. 2009 à 19:42
(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
Sunnydelight
Messages postés8Date d'inscriptionmercredi 10 juin 2009StatutMembreDernière intervention26 janvier 2013 3 juil. 2009 à 11:42
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
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.
cs_ghuysmans99
Messages postés3982Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 3 juil. 2009 à 19:36
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.