Saisie Format heure (00:00) dans Textboxt VB.NET [Résolu]

Signaler
Messages postés
468
Date d'inscription
jeudi 27 mars 2014
Statut
Membre
Dernière intervention
8 mars 2020
-
Messages postés
14861
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 octobre 2020
-
Bonjour chers tous
Je bloque vraiment dans mon projet pour "obliger" la saisie numérique de format heure .
J'obtiens l'erreur KeyAscii nest pas déclaré sur ce code qui fonctionne parfaitement sur un projet Excel.


 Dim touche_autorisée As String
        touche_autorisée = "[01234567989:]"
        'on ne peut pas taper autre chose que des chiffres
        If Not ChrW(KeyAscii) Like touche_autorisée Then KeyAscii = 0
        'ici on empeche de taper plus de 4 chiffre(2 pour l'heure,2pour les minutes )
        If Len(Textheure.text) = 5 Then KeyAscii = 0 : Exit Sub
        'ici on empeche de taper plus gros que 2 pour le premier chiffre de l'heure
        If Len(Textheure.text) = 0 And Not ChrW(KeyAscii) Like "[0-1-2]" Then KeyAscii = 0
        'ici on empeche de taper plus gros que 3 pour le deuxieme chiffre de l'heure en fonction du premier
        If Len(Textheure.text) = 1 And Textheure.text = 2 And Not ChrW(KeyAscii) Like "[0-1-2-3]" Then KeyAscii = 0
        'ici on empeche de taper plus gros que 5 pour les dizaine de minute(59 minutes maximum)
        If Len(Textheure.text) = 3 And Not ChrW(KeyAscii) Like "[0-1-2-3-4-5]" Then KeyAscii = 0
        If Len(Textheure.text) = 2 Then
            If ChrW(KeyAscii) <> ":" Then KeyAscii = Asc(":")
        End If
        End If


Merci de votre coup de pouce
Cordialement

7 réponses

Messages postés
14861
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 octobre 2020
446
Bon maintenant, que j'ai accès à un PC.
J'ai posé une MaskedTextBox sur un winform, cliqué sur la petite flèche au dessus de la zone de saisie, pour sur "Définire masque" et enfin j'ai sélectionné "Heure"


Voilà, rien d'autre à faire.
Messages postés
468
Date d'inscription
jeudi 27 mars 2014
Statut
Membre
Dernière intervention
8 mars 2020

Alors Là!!! J'ai presque honte d'avoir Demandé .La solution était ....à deux clics. Encore fallait il le savoir
Grand grand merci Mr Whismeril
Messages postés
14861
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 octobre 2020
446 >
Messages postés
468
Date d'inscription
jeudi 27 mars 2014
Statut
Membre
Dernière intervention
8 mars 2020

De rien
Messages postés
2240
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
16 octobre 2020
114
Bonsoir
Excel utilise VBA ( Visual Basic Application) et n'a rien à voir avec VB Net .
C'est comme mélanger les torchons et les serviettes en faisant la lessive
Messages postés
14861
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 octobre 2020
446
Bonsoir

Ben oui vba et vb.net c’est pas pareil.

Si tu regardes la signature de l’événement dans vba tu verras que la variable keypress y est passée en paramètre alors que dans la signature de vb.net il y a sender et e.

La touche tapée est une des propriétés de e, là de tête je ne sais plus laquelle.

Mais que ce soit en vba ou en vb.net, je pense qu’une maskedtextbox est plus facile à utiliser.
Messages postés
2240
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
16 octobre 2020
114
Bonsoir Whis
c'est
e.KeyCode
qui fournit le caractère tapé au clavier en VB Net en utilisant l'évènement TextBox1.KeyDown

Messages postés
468
Date d'inscription
jeudi 27 mars 2014
Statut
Membre
Dernière intervention
8 mars 2020

Merci
Donc si je remplace
KeyAscii
par
e.KeyCode 

ca devrait marcher .
J'essaie...
Messages postés
14861
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 octobre 2020
446
Salut, oui mais si elle s'est abonnée au KeyPress c'est e.KeyChar.
Messages postés
2240
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
16 octobre 2020
114
Bonsoir
On ne code pas en VB Net de la même façon qu'en VBA .
Cela m'étonnerait beaucoup que cela fonctionne
Messages postés
468
Date d'inscription
jeudi 27 mars 2014
Statut
Membre
Dernière intervention
8 mars 2020

Non effectivement
échec total
aurais tu une proposition de code?
Merci d'avance
Messages postés
2240
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
16 octobre 2020
114
Bonsoir
Regarde ce que fait ce code et comprends le .
Ensuite tu pourras coder pour ta saisie d'heure

Private Sub Textbox1_KeyDown(sender As Object, e As KeyEventArgs) Handles Textbox1.KeyDown

        Select Case e.KeyCode
            Case "1"
                MessageBox.Show("la touche tapée est 1")
            Case "2"
                MessageBox.Show("la touche tapée est 2")
            Case "3"
                MessageBox.Show("la touche tapée est 3")
        End Select

Messages postés
468
Date d'inscription
jeudi 27 mars 2014
Statut
Membre
Dernière intervention
8 mars 2020

Je l'ai testé mais il ne se passe rien : pas de message box
Private Sub Textheure_KeyDown(sender As Object, e As KeyEventArgs) Handles Textheure.KeyDown
        Select Case e.KeyCode
            Case "1"
                MessageBox.Show("la touche tapée est 1")
            Case "2"
                MessageBox.Show("la touche tapée est 2")
            Case "3"
                MessageBox.Show("la touche tapée est 3")
        End Select
    End Sub
Messages postés
14861
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 octobre 2020
446
Keycode n’est pas une string, c’est une énumération, sa valeur est Keys.quelquechose
Messages postés
2240
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
16 octobre 2020
114
Désolé pour l'erreur Whis : j'ai tapé de tête trop vite depuis un morceau de code issu de mes projets
Voici le code correct
Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyDown

        Select Case e.KeyCode
            Case Keys.NumPad1
                MessageBox.Show("la touche tapée est la touche numérique 1")
            Case Keys.NumPad2
                MessageBox.Show("la touche tapée est la touche numérique 2")
            Case Keys.NumPad3
                MessageBox.Show("la touche tapée est la touche numérique 3")
            Case Keys.A
                MessageBox.Show("la touche tapée est la lettre a")
        End Select
    End Sub


Mais Whismeril a proposé du largement mieux avec un MaskedTextBox au message 11