CeNedra83
Messages postés96Date d'inscriptionlundi 20 novembre 2000StatutMembreDernière intervention11 juillet 2006
-
28 juil. 2005 à 14:53
doryam
Messages postés7Date d'inscriptionlundi 6 septembre 2004StatutMembreDernière intervention30 octobre 2012
-
29 juil. 2005 à 10:01
je réalise une IHM en VB6 avec beaucoup de textbox.
je voudrais réaliser une fonction qui avec une textbox en paramètre, ne permette de rentrer que des nombres négatifs, à virgule ou non, sans aucune lettres. et ne pas permettre bien sur qu'il y ait plusieurs points ou signe -...
comment faire? je me galère!
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 28 juil. 2005 à 15:11
Eheh, il y a encore mieux : au lieu de passer le textbox en paramètre,
laisse ta fonction définir quel textbox à le focus pour appliquer le
filtre. C'est ce que j'ai fait pour un gros projet, et croit moi, au
bout de 3 feuilles, on en a vite marre de rentrer en paramètre le nom
des objets à filtrer !
Voici un exemple de filtre :
Mets ce code dans un module :
Public Sub MaskNegatif(ByRef frmFeuille As Object, ByRef sKey As Integer)
'l'erreur etant minime, on continue l'éxécution normalement
'déclaration des variables privées
Dim oControl As Object 'stocke le contrôle actif
'on permet d'effacer le dernier caractère
If sKey = 8 Then Exit Sub
'on récupère le contrôle actif
Set oControl = frmFeuille.ActiveControl
'on évite que l'utilisateur rentre du texte
If Not IsNumeric(oControl.Text & Chr(sKey)) And
Left(oControl.Text & Chr(sKey), 1) <> "+" And
Left(oControl.Text & Chr(sKey), 1) <> "-" Then
Let sKey = 0
End If
If Val(oControl.Text & Chr(sKey)) < 0 Then
Let oControl.ForeColor = vbRed
Else
Let oControl.ForeColor = vbWindowText
End If
End Sub
Et ceci dans les événements KeyPress de tes textboxes :
Private Sub Text1_KeyPress(..)
call MaskNegatif(Me, KeyAscii)
End Sub
Comme cà, tu peux rapidement faire du copier coller de ce code pour
l'appliquer à beaucoup de textbox sans devoir changer le nom des
paramètres à chaque fois !
DarK Sidious
Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013129 28 juil. 2005 à 15:27
Désolé ZLub, le temps que je poste, tu avais déjà répondu ;)
Oui en effet, ma fonction revient au même que ce que tu propose.
Sinon, CeNedra83, il est tout à fait possible d'appliquer plusieurs
masques à un textbox, il faut juste bien définir l'ordre (d'abord
négatif, ensuite virgule, et enfin, entiers) pour obtenir des résultats
cohérents.
Dans le même ordre d'idée :
Masque négatif
Masque virgule
Masque Entier
Masque Numérique
Masque Date
Masque texte
Masque alphanumérique
tout ces masque peuvent également mis en place plus facilement en
utilisant le contrôle MaskEdit de Microsoft, mais il faut alors
connaître les formats, ce qui n'est pas chose aisée !
DarK Sidious
Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
cs_hassen
Messages postés338Date d'inscriptionmardi 28 janvier 2003StatutMembreDernière intervention 4 novembre 2008 28 juil. 2005 à 15:33
je te conseil de faire non pas une fonction mais un control utilisateur UserControl
qui permet de realiser les fonctionnalité que tu a mentionné
la base de ce control sera un control textbox
dans l'evenement KeyPress de text1 tu ecrit le code suivant:
Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim CaractereAutorise As String
Text1.SelText = ""
CaractereAutorise = "-.0123456789" & Chr(vbKeyDelete) & Chr(vbKeyReturn) & Chr(vbKeyBack)
If InStr(1, CaractereAutorise, Chr(KeyAscii)) = 0 Then
KeyAscii = 0
Exit Sub
End If
If Chr(KeyAscii) "-" And Not (InStr(1, Text1.Text, "-") 0 And Text1.SelStart = 0) Then KeyAscii = 0If InStr(1, Text1.Text, ".") <> 0 And Chr(KeyAscii) "." Then KeyAscii 0
If Chr(KeyAscii) "." And Text1.Text "" Then
Text1.Text = "0"
Text1.SelStart = 1
End If
If Chr(KeyAscii) "." And Text1.Text "-" Then
Text1.Text = "-0"
Text1.SelStart = 2
End If
CeNedra83
Messages postés96Date d'inscriptionlundi 20 novembre 2000StatutMembreDernière intervention11 juillet 2006 28 juil. 2005 à 16:24
DarkSidious je me suis aidée de ce que tu avais fait et de ce que j'avais déjà fait pour faire ceci.
Cela marche très bien pour ce que je veux, sauf que ça ne paermet pas de rentrer un signe moins!
alors que si j'écris le code dans l'évènement Keypress d'une textbox, cela marche très bien.
Quel est mon pb?
Public Sub Mask(ByRef frmFeuille As Object, ByRef KeyAscii As Integer)
'on active la routine de traitement d'erreur
On Error Resume Next
'l'erreur etant minime, on continue l'éxécution normalement
'déclaration des variables privées
Dim oControl As Object 'stocke le contrôle actif
'on récupère le contrôle actif
Set oControl = frmFeuille.ActiveControl
Select Case KeyAscii
Case 8:
Case 45: If InStr(oControl.Text, "-") > 0 Then KeyAscii = 0
If oControl.Text.SelStart <> 0 Then KeyAscii = 0
Case 46: If InStr(oControl.Text, ".") > 0 Then KeyAscii = 0
Case 48 To 57:
Case Else: KeyAscii = 0: Beep
End Select
doryam
Messages postés7Date d'inscriptionlundi 6 septembre 2004StatutMembreDernière intervention30 octobre 2012 29 juil. 2005 à 10:01
Il te suffit de rentrer une seule ligne par Textbox à vérifier et ceci dans l'évènement KeyPress comme suit:
Private Sub txtChamp_KeyPress(KeyAscii As Integer)
IsDecimal txtChamp, KeyAscii, False
End Sub
et il puis met les deux Fonctions "IsDecimal" et "IsKeyDecimal" quelque part dans le Code de ta fenêtre où dans un Module en prenant soin de les déclarer en PUBLIC.