Un seul point ou virgule dans une TextBox

Résolu
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 - 14 août 2022 à 08:29
Whismeril Messages postés 19034 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 - 16 août 2022 à 09:04

Bonjour le Forum,


Je cherche un code qui n'autorise qu'une seule virgule ou point dans une TextBox, et s'il y a un déjà un point la saisie de la virgule serait impossible et vise versa

Actuellement, ce code me permet de n'afficher que des chiffres , et .
 

If InStr("0123456789.,", e.KeyChar) = 0 And e.KeyChar <> vbBack Then
            e.Handled = True

Merci pour votre aide,

9 réponses

Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
Modifié le 15 août 2022 à 11:54

Bonjour Whismeril,

Merci pour les conseils,

Avec ce code un seul point ou virgule s'affiche, mais je ne trouve pas comment coder si une virgule est déjà présente ne pas afficher le point et vise versa.

Private Sub TextBox1_KeyPress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        If Not IsNumeric(e.KeyChar) AndAlso e.KeyChar <> vbBack AndAlso e.KeyChar <> "." AndAlso e.KeyChar <> "," Then
            e.Handled = True
        End If
        If (e.KeyChar = ".") AndAlso ((TryCast(sender, TextBox)).Text.IndexOf(".") > -1) Then
            e.Handled = True
        End If
        If (e.KeyChar = ",") AndAlso ((TryCast(sender, TextBox)).Text.IndexOf(",") > -1) Then
            e.Handled = True
        End If
    End Sub
1
Whismeril Messages postés 19034 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 656
15 août 2022 à 12:16

Pourquoi me remercier pour des conseils que tu n'appliques pas?

Je t'ai dis qu'en le présentant avec un Select case, se serait plus lisible, et donc plus simple à comprendre et corriger.

En plus pour savoir si une string contient un caractère, il y a la méthode Contains.

Select Case e.KeyChar
    Case "0"c, "1"c, "2"c, "3"c, "4"c, "5"c, "6"c, "7"c, "8"c, "9"c, vbBack
        Return 'c'est ce qu'on veut, on quitte la méthode

    Case "."c, ","c
        Dim texte As String = (TryCast(sender, TextBox)).Text 'faire 2 fois le même Cast, gâche de la ressource système et du temps pour rien

        If texte.Contains(".") OrElse texte.Contains(",") Then e.Handled = True 's'il y a déjà un point ou une virgule, on bloque
        
        Return 'quelque soit la valeur de Handled, on quitte la procédure

    Case Else
        e.Handled = True 'c'est pas ce qu'on veut, on bloque et on s'en va
        Return
End Select

PS, il faut choisir BASIC pour la coloration, sinon ça fait un pavé tout gris comme tu avais avant que je corrige.

1
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
15 août 2022 à 18:02

 Convert.ToChar(8)  fonctionne, je peux de nouveau utiliser la touche DEL, Merci à vous.

1
Whismeril Messages postés 19034 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 656
Modifié le 14 août 2022 à 09:47

Bonjour

Tu fais un second if, dans lequel tu testes si e.KeyChar est un point ou une virgule et s'il y a déjà un point ou une virgule dans le texte de la textbox, si oui tu sors de la même manière.


0
Whismeril Messages postés 19034 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 656
14 août 2022 à 09:49

Tu pourrais présenter ça sous la forme d'un select case.

Case de 0 à 9, on ne fait rien

Case vbBack, on ne fait rien

Case , ou . on teste si c'est déjà présent, si oui Handle = true, sinon rien

Case tout le reste, Handle = true

0
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
15 août 2022 à 16:38

Jusqu'à présent je n'utilisais pas select case, mais je vois que c'est bien utile, merci pour votre code " qui me permet dans apprendre un peu plus" sinon sur votre code j'ai vbBack surligné en rouge, "conversion implicite de string en Char", j'ai supprimé vbBack et le code fonctionne, mais la touche DEL ne fonctionne plus "pour info la touche supprime fonctionne" .

0

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

Posez votre question
Whismeril Messages postés 19034 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 656
15 août 2022 à 17:01

Ha ben ça c'est étonnant, puisque tu utilisais déjà vbBack...

Essaye Convert.ToChar(8) à la place.

La touche suppr n.est pas interceptée par le KeyPress, mais par le KeyDown


0
Whismeril Messages postés 19034 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 656
15 août 2022 à 18:10

De rien


0
Whismeril Messages postés 19034 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 656
15 août 2022 à 18:32

En fait non, pas de rien.

En février 2021, https://codes-sources.commentcamarche.net/forum/affich-10104592-cherche-solution-pour-avoir-moins-de-if#5 je t'ai conseillé de suivre le cours de Tahé.

Ce qui prend quelques jours et permet d'apprendre les bases de VB.Net, dont Select Case et Contains, la difference entre KeyDown et KeyPress

Donc si tu avais pris ces quelques jours il y a un an et demi, normalement tu ne devrais plus mal connaître ces bases voire ne plus poser ce type de question depuis un an et demi.


0
Tempus01 Messages postés 81 Date d'inscription mercredi 6 janvier 2021 Statut Membre Dernière intervention 27 septembre 2022 2
16 août 2022 à 08:13

Bonjour Whismeril,

Les lectures que vous m'avez conseillé ont été utiles et j'ai compris/appris beaucoup, mais certaine forme de codage me semble plus obscure tel que Select case, le vb.net est bien plus complexe qu'il n'y parait.

0
Whismeril Messages postés 19034 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 656
16 août 2022 à 09:04

Pourtant, un Select Case (ou switch dans plusieurs autres langages) est un instruction de base, il y a bien plus complexe.


0
Rejoignez-nous