none
Traitement des chaines de caractères RRS feed

  • Question

  • Bonjour à tous et bonne année.

    Je développe sous Visual Basis 2010 Express une appli sur la "Numérologie" et souhaiterai interdire dans un champ "label1" toute saisie autre que des lettres de l'alphabet, (champ concernant le nom et prénom).

    Dans un autre champ "Label2" interdire toute saisie autre que du numérique. Champ concernant la date de naissance.

    Pour le reste c'est ok, l'équivalence entre l'alphabet / nombre s'effectue bien, calculs et résultats ok

    Avez vous une solution à me proposer concernant le Label1 et Label2

    D'avance merci   

    lundi 4 janvier 2016 06:14

Réponses

  • Voici une solution avec un TextBox, plutôt qu'un label.

    Pour n'avoir que des valeurs numériques.

    ''' <summary>
        ''' Comportement de la Textbox pour n'accepter que des valeurs numériques. 
        ''' Gère l'événement KeyPress pour filtrer les caractères.
        ''' Les caractères de contrôles sont acceptés.
        ''' </summary>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        Private Sub TextBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
            If Char.IsDigit(e.KeyChar) = False And Char.IsControl(e.KeyChar) = False Then
                e.Handled = True
            End If
        End Sub

    Vous pouvez changer le code pour char.IsLetter.

    MAIS une meilleur façon est d'utiliser une MaskTextBox:

     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Me.MaskedTextBox1.Mask = "00/00/0000"
            Me.MaskedTextBox1.ValidatingType = GetType(System.DateTime)
        End Sub
    MSDN a un bon exemple avec un tooltip également : https://msdn.microsoft.com/en-us/library/system.windows.forms.maskedtextbox.validatingtype%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396



    Cyrille Precetti
    Bonne Année! Happy New Year!

    • Marqué comme réponse Koriru85 lundi 4 janvier 2016 13:49
    lundi 4 janvier 2016 11:24

Toutes les réponses

  • Voici une solution avec un TextBox, plutôt qu'un label.

    Pour n'avoir que des valeurs numériques.

    ''' <summary>
        ''' Comportement de la Textbox pour n'accepter que des valeurs numériques. 
        ''' Gère l'événement KeyPress pour filtrer les caractères.
        ''' Les caractères de contrôles sont acceptés.
        ''' </summary>
        ''' <param name="sender"></param>
        ''' <param name="e"></param>
        Private Sub TextBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
            If Char.IsDigit(e.KeyChar) = False And Char.IsControl(e.KeyChar) = False Then
                e.Handled = True
            End If
        End Sub

    Vous pouvez changer le code pour char.IsLetter.

    MAIS une meilleur façon est d'utiliser une MaskTextBox:

     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Me.MaskedTextBox1.Mask = "00/00/0000"
            Me.MaskedTextBox1.ValidatingType = GetType(System.DateTime)
        End Sub
    MSDN a un bon exemple avec un tooltip également : https://msdn.microsoft.com/en-us/library/system.windows.forms.maskedtextbox.validatingtype%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396



    Cyrille Precetti
    Bonne Année! Happy New Year!

    • Marqué comme réponse Koriru85 lundi 4 janvier 2016 13:49
    lundi 4 janvier 2016 11:24
  • Super sympa, merci
    lundi 4 janvier 2016 13:02
  • Super génial, ça tourne nickel, merci Cyrille
    lundi 4 janvier 2016 13:50