none
Vérification TextBox RRS feed

  • Question

  • Bonjour

    j'ai un TextBox à remplir, 7 numériques puis 1 lettre en minuscule (entre A et z).
    je désire obliger les 7 saisies de numériques suivi de cette lettre mais je pêche ...

    si vous aviez un bout de code pour moi ....

    Grand merci par avance.

    Cordialement

    lundi 2 août 2010 19:17

Réponses

  • Bonjour,

    Il suffit tout simplement d'utiliser un MaskTextBox. Ensuite spécifiez le masque suivant : 9999999<L

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    lundi 2 août 2010 21:28
    Modérateur
  • Bonsoir,

    Tiens, si tu préfères, voici un code qui gère la saisie :

    ' form 2 (pour l'exemple)
    Option Explicit On
    Public Class Form2
    
     ' 3 objets = form + textbox1 + button1 = 2
    
     Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      TextBox1.MaxLength = 8
     End Sub
    
    
     Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
      ' <Entrée> à fin de saissie pour valider
      If Asc(e.KeyChar) = 13 Then Call Button1_Click(sender, e)
     End Sub
    
    
     Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      ' valide le texte
      Dim trans As String
      Dim i As Long
      Dim octet As String
      '
      trans = Trim(TextBox1.Text)
      TextBox1.Text = trans
      '
      If Len(TextBox1.Text) < 8 Then
    bis: MsgBox("Saisie invalide, saisir (7 chiffres + 1 lettre minuscule) sans espace", vbExclamation)
       TextBox1.Focus()
       Exit Sub
      End If
      '
      For i = 1 To 7
       If Asc(Mid(trans, i, 1)) < 48 Or Asc(Mid(trans, i, 1)) > 57 Then GoTo bis
      Next i
      '
      octet = Mid(TextBox1.Text, 8, 1)
      octet = LCase(octet)
      trans = Mid(TextBox1.Text, 1, 7) & octet
      TextBox1.Text = trans
      If Asc(octet) < 97 Or Asc(octet) > 122 Then GoTo bis
      MsgBox("Saisie conforme", vbInformation)
     End Sub
    
    
    End Class
    

    Cordialement.


    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    mardi 3 août 2010 20:31

Toutes les réponses

  • Bonjour,

    Ça veut dire quoi "obliger les 7 saisies ..." ?

    Tu ne dis pas davantage si c'est sur une ligne ou en colonnes ?

    Exemple de remplissage d'un textBox sur une ligne avec 7 valeurs numériques et une lettre :

     Dim i As Long
     Textbox1.Text = ""
     For i = 1 To 7
      Textbox1.Text = Textbox1.Text & i
     Next i ' 1234567
     Textbox1.Text = Textbox1.Text & "a" ' = 1234567a
    

    Est-ce ceci que tu veux ?

    Cordialement.


    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    lundi 2 août 2010 20:55
  • Bonjour,

    Il suffit tout simplement d'utiliser un MaskTextBox. Ensuite spécifiez le masque suivant : 9999999<L

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS ADO .NET 3.5 - MCPD Windows Developper 3.5 - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    lundi 2 août 2010 21:28
    Modérateur
  • Bonjour,

    Ah, je n'avais pas compris la question, heureusement que Gille est là :o)

    MaskedTextBox1.Mask = "999999999 < L"
    

    Le problème à mon sens c'est que c'est vilain, vilain et vilain :

    ________ _

    Ça peut passer dans une application mais pas dans un logiciel. Personnellement je l'aurais testé en code, mais bon, chacun fait comme il veut :o)

    Cordialement.

     

     


    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    mardi 3 août 2010 19:44
  • Bonsoir,

    Tiens, si tu préfères, voici un code qui gère la saisie :

    ' form 2 (pour l'exemple)
    Option Explicit On
    Public Class Form2
    
     ' 3 objets = form + textbox1 + button1 = 2
    
     Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      TextBox1.MaxLength = 8
     End Sub
    
    
     Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
      ' <Entrée> à fin de saissie pour valider
      If Asc(e.KeyChar) = 13 Then Call Button1_Click(sender, e)
     End Sub
    
    
     Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      ' valide le texte
      Dim trans As String
      Dim i As Long
      Dim octet As String
      '
      trans = Trim(TextBox1.Text)
      TextBox1.Text = trans
      '
      If Len(TextBox1.Text) < 8 Then
    bis: MsgBox("Saisie invalide, saisir (7 chiffres + 1 lettre minuscule) sans espace", vbExclamation)
       TextBox1.Focus()
       Exit Sub
      End If
      '
      For i = 1 To 7
       If Asc(Mid(trans, i, 1)) < 48 Or Asc(Mid(trans, i, 1)) > 57 Then GoTo bis
      Next i
      '
      octet = Mid(TextBox1.Text, 8, 1)
      octet = LCase(octet)
      trans = Mid(TextBox1.Text, 1, 7) & octet
      TextBox1.Text = trans
      If Asc(octet) < 97 Or Asc(octet) > 122 Then GoTo bis
      MsgBox("Saisie conforme", vbInformation)
     End Sub
    
    
    End Class
    

    Cordialement.


    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    mardi 3 août 2010 20:31
  • Bonsoir et désolé de répondre si tard.

    Merci à EhJoe et Gilles, mais j'aurais bien opté pour la solution de EhJoe, mais, je ne sais si c'est parce que je suis sous Excel2003 ou quoi, mais j'ai fait un bête copier/coller avec adaptation des noms d'objets, mais j'ai presque tout en rouge !! voir http://cjoint.com/?iEuEtEPeyS

    Je n'ai peut-être pas posé le code dans les bonnes zones ??

    Module de classe ? Option Explicite On --> On pose des problèmes Etc...

    Je re explique mon objectif :

    je dois faire saisir dans la zone de texte 8 caractères obligatoires à savoir 7 num + 1 lettre (de a à z).

    Le dernier caractère saisi, le contenu de la zone de texte va être automatiquement recherché dans un tableau de correspondance par VBA, réponse sera donnée par msgbox "trouvé" ou "inconnu".

    Voilà, j'espère avoir donné de meilleures explications.

    merci de votre aide.

    Cordialement.

    Pilou37

    lundi 30 août 2010 18:38
  • Bonjour,

    En fait, pour qu'il n'y ait pas de quiproquo et que ça tourne, peux-tu créer une nouvelle application (juste pour vérifier), puis coller totalement le code (classe FORM1), puis mettre exactement les objets prévus avec leur nom d'origine, et ça donne quoi ?

    Cordialement.


    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    lundi 30 août 2010 18:48
  • Bonjour

    je pourrais avoir l'exemple cet exemple de code en C#?

    Remerciements

    J.PERIGNY


    Jean PERIGNY, Développeur
    vendredi 24 septembre 2010 13:04
  • Bonjour,

    A qui demandes-tu ça ?

    Cordialement.


    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    vendredi 24 septembre 2010 15:52
  • A toi, je pense que c'est toi qui a ecrit l'exemple de code en VB, et il m'interresse en C#

    Cordialement,


    Jean PERIGNY, Développeur
    vendredi 24 septembre 2010 16:38
  • Bonsoir J,

    Je ne connais pas le c#, il paraît que ça ressemble beaucoup au vbNet, par contre si tu le connais et que tu butes sur des instructions, tu peux me dire lesquelles et je te dirais à quoi elle servent afin que tu écrives l'équivalent, mais dans ce cas passe par mail, vois mon enpied, cordialement.

     


    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    vendredi 24 septembre 2010 17:06
  • Bonjour/Bonsoir

     

    Pourquoi ne pas utiliser regular Expression ?

    Je vous donne un petit exemple, faite moi savoir ce que vous pensez ...

     

    Imports System.Text.RegularExpressions
    
    Public Class Form1
    
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        If TextBox1.Text.Count > 9 Then
          MsgBox("Supperieur a 8 Caractaires")
          Exit Sub
        End If
    
        Dim text As String = TextBox1.Text
        Dim pattern As String = "^\d{8}[A-Z]{1}"
    
        Dim r As Regex = New Regex(pattern, RegexOptions.IgnoreCase)
        If r.IsMatch(text) = True Then
          MsgBox("Correspondance 8 Numérique + 1 Lettre")
        Else
          MsgBox("Raté ... Try Again")
    
        End If
      End Sub
    End Class
    


    Cordialement, Troxsa
    • Proposé comme réponse TroxsaEditor samedi 25 septembre 2010 07:12
    vendredi 24 septembre 2010 19:26
    Auteur de réponse
  • Pardon je viens de voir deux erreurs c'est 7 caractères que vous avez demandé et j'en ai mis 8, faire les modifications avant de "^\d{8}[A-Z]{1}" en "^\d{7}[A-Z]{1}"

    Puis le if a 8


    Cordialement, Troxsa
    vendredi 24 septembre 2010 19:30
    Auteur de réponse
  • Bonjour Troxsa,

    je le trouve très interressant, mais, pourriez vous le ré-écrire en C#?

    Remerciements,


    Jean PERIGNY, Développeur
    samedi 25 septembre 2010 04:32
  • Bonjour,

     

    Je suis pas un pro en C#, je suis passé par un outils de conversion a vous de faire les corrections en C# si il y en a besoin ...

     

    using System.Diagnostics;
    using System.Text.RegularExpressions;
    
    public class Form1
    {
    
    	private void Button1_Click(System.Object sender, System.EventArgs e)
    	{
    		if (TextBox1.Text.Count > 9) {
    			Interaction.MsgBox("Supperieur a 8 Caractaires");
    			return;
    		}
    
    		string text = TextBox1.Text;
    		string pattern = "^\\d{8}[A-Z]{1}";
    
    		Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
    		if (r.IsMatch(text) == true) {
    			Interaction.MsgBox("Correspondance 8 Numérique + 1 Lettre");
    		} else {
    			Interaction.MsgBox("Raté ... Try Again");
    
    		}
    	}
    }
    
    
    


    Cordialement, Troxsa
    samedi 25 septembre 2010 07:11
    Auteur de réponse
  • Bonjour,

    Pourquoi tu viens en vbNet demander des réponses en C# ?

    Dans c# il y en a qui connaissent vbNet ...

    Cordialement.

     


    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    samedi 25 septembre 2010 07:15
  • Bonjour,

    C'est en faisant les recherches que je suis arrivé ici, et il y a toujours quelques chose a apprendre

    Remerciements à tous,


    Jean PERIGNY, Développeur
    samedi 25 septembre 2010 08:31