IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Surveillance de l'entrée d'un TextBox


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Mars 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel

    Informations forums :
    Inscription : Mars 2005
    Messages : 82
    Par défaut Surveillance de l'entrée d'un TextBox
    Bonjour à tous

    J'ai une TextBox qui est en entrée ou en sortie.
    Dans cette TextBox je veux que l'opérateur saisie une valeur numérique comprise entre 0 et 100.
    Est il possible de définir simplement les minimum et maximum et surtout que c'est bien une valeur munérique qui a été saisie (non pas du texte).
    Tout cela pour éviter de faire des contrôles (if ... alors)

    merci

  2. #2
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    j'ai rencontré ce cas dans mon projet,
    j'ais blindé sur la sécurité
    mais que avec des test que tu redoute tant ...

    je te laisse le code d'une de mes textBox,
    aprés c'est toujours la même chose

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Private Sub txtLargeurPalette_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtLargeurPalette.Validated
            ' Nouvelle Info Bulle
            InfoBulle = New System.Windows.Forms.ToolTip
            ' avec un skin plus agréable
            InfoBulle.IsBalloon = True
     
            Dim LargeurPaletteMin As Integer = 0
            Dim LargeurPaletteMax As Integer = 500
            'Si une erreur est présente alors on affiche le message d'erreur *voir en bas*
            On Error GoTo ErrLargeurPalette
     
            ' Si la textBox est vide on ne vérifie rien
            If (Me.txtLargeurPalette.Text = Nothing) Then
                Exit Sub
            End If
     
            'Récupération et conversion de la largeur dans une variable
            LargeurPalette = CInt(Me.txtLargeurPalette.Text)
     
            'Vérification de la largeur entrée dans la textBox
            'Si la valeur saisie n'est pas correcte
            'un message d'erreur est affiché et on vide la textBox
            If (LargeurPalette > LargeurPaletteMax) Then
                InfoBulle.Show("La largeur de la palette entrée est trop grande", txtLargeurPalette, 0, -40, 2000)
                Me.txtLargeurPalette.Text = Nothing
            End If
     
            If (LargeurPalette < LargeurPaletteMin) Then
                InfoBulle.Show("La largeur de la palette entrée est trop petite", txtLargeurPalette, 0, -40, 2000)
                Me.txtLargeurPalette.Text = Nothing
            End If
            Exit Sub
     
     
            'Message d'erreur
    ErrLargeurPalette:
            InfoBulle.Show("La largeur de la palette ne doit contenir que des chiffres", txtLargeurPalette, 0, -40, 2000)
            Me.txtLargeurPalette.Text = Nothing
     
        End Sub
    hésite pas a me demander si tu veut des précisions

    PS, c'est au moment de la fontion suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     'Récupération et conversion de la largeur dans une variable
            LargeurPalette = CInt(Me.txtLargeurPalette.Text)
    qu'est détécté si il y a des lettres et une erreur se produit,
    erreur gérée par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    'Si une erreur est présente alors on affiche le message d'erreur *voir en bas*
            On Error GoTo ErrLargeurPalette
     
    '...
    '...
     
    'Message d'erreur
    ErrLargeurPalette:
            InfoBulle.Show("La largeur de la palette ne doit contenir que des chiffres", txtLargeurPalette, 0, -40, 2000)
            Me.txtLargeurPalette.Text = Nothing

  3. #3
    Membre confirmé
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Mars 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel

    Informations forums :
    Inscription : Mars 2005
    Messages : 82
    Par défaut
    Salut hunteshiva

    Merci pour ta proposition

    Je pense que dans ton code si tu saisie du texte dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LargeurPalette = CInt(Me.txtLargeurPalette.Text)
    ton Cint te sortira une erreur d'exception , non ?

    La solution serait d'avoir une ValueBox dans la boîte à outil

  4. #4
    Membre Expert Avatar de hunteshiva
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2010
    Messages
    1 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 1 069
    Par défaut
    wii, et c'est mon objectif, qu'il me génére une erreur

    comme sa je la gére avec le avec le OnError

  5. #5
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Bonjour,
    Citation Envoyé par Arnaud Malabeux Voir le message
    Salut hunteshiva
    Je pense que dans ton code si tu saisie du texte dans
    LargeurPalette = CInt(Me.txtLargeurPalette.Text)

    ton Cint te sortira une erreur d'exception , non ?
    tu peux empêcher la saisie de texte avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TBObjet.KeyPress
            If Not Char.IsControl(e.KeyChar) And Not Char.IsDigit(e.KeyChar) Then
                e.Handled = True
            End If
        End Sub
    De cette manière plus de plantage.

    Sinon dans ton cas, un numéricUpDown comme te le propose methylene serait plus efficace avec le maximum et le minimum qui correspondrait en tout point à ta demande :

    Citation Envoyé par Arnaud Malabeux Voir le message
    Dans cette TextBox je veux que l'opérateur saisie une valeur numérique comprise entre 0 et 100.
    Est il possible de définir simplement les minimum et maximum et surtout que c'est bien une valeur munérique qui a été saisie (non pas du texte).
    Tout cela pour éviter de faire des contrôles (if ... alors)

  6. #6
    Membre habitué
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Décembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2008
    Messages : 10
    Par défaut Convertion du controle de Hunteshiva vers du C#
    Bonjour Hunteshiva,

    Un grand merci pour ta solution qui fonctionne super bien en vb.net, je suis novice dans le dev et je venais de commencé un projet en vb qui utilisé ta solution lorsque mon patron ma proposé une formation en C#. J'ai décidé de refaire mon projet en c# mais je rencontre des difficulté à convertir ta solution de contrôle d'une textbox pour qu'elle n'accepte pas de texte mais uniquement une valeur numérique entre 1 et 365.

    Ma conversion semble fonctionner:
    Si la valeur saisi est du texte => infobulle ok
    Si la valeur numérique est 0 => infobulle ok

    Mais lors que je saisi une valeur numerique supérieur à 0, il me renvoie une erreur "Une exception non gérée du type 'System.ArgumentNullException' s'est produite dans System.Windows.Forms.dll" .

    Voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
       private void textBox_Retention_TextChanged(object sender, EventArgs e)
            {
                //Activation des messages infobulle dans la textebox
                //===================================================
                var infobulle = new ToolTip();
                infobulle.IsBalloon = true;
                infobulle.OwnerDraw = true;
                infobulle.ForeColor = Color.Red;
                infobulle.ToolTipTitle = "Erreur de Saisie";
                infobulle.ToolTipIcon = ToolTipIcon.Error;
     
                int texte_value_min = 1;
                int texte_value_max = 365;
     
                try
                { 
                // Si la textBox est vide on ne vérifie rien
                //===========================================
                if (string.IsNullOrEmpty(textBox_Retention.Text))
                { return; }
     
                //Récupération et conversion de la largeur dans une variable
                //==========================================================
                int texte_value;
                texte_value = Convert.ToInt32(textBox_Retention.Text);
     
                //Vérification de la valeur minimum et maximum entrée dans la textBox, Si la valeur saisie n'est pas correcte
                //on affiche un Message d'erreur et on vide la textBox
                //============================================================================================================
                if (texte_value > texte_value_max)
                { infobulle.Show("Le Maximum de jours autorisé est de 365/J", textBox_Retention, 0, -75, 3000); }
                else
                { textBox_Retention.Text = null; }
     
                if (texte_value < texte_value_min)
                    { infobulle.Show("Votre Saisi 0 Jour est Interdite, Veuillez Séléctionner une Valeur de 1 à 465/J", textBox_Retention, 0, -75, 3000); }
                else
                { textBox_Retention = null;
                    return;
                }
                }
     
                //Message d'erreur
                catch
                { infobulle.Show("Veuillez Saisir Uniquement une Valeur Numérique pour la Période de Rétention", textBox_Retention, 0, -75, 3000);
                    textBox_Retention.Text = null;
                    // return;
                }
     
            }

    Merci d'avance de votre aide.


    Cordialement.

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    le textbox bricolé demanderait des centaines de lignes de code pour être optimal, car il faut aussi gérer le clic droit/coller par exemple


    le mieux a été dit, c'est le controle numericupdown qui sert à la saisie de nombre, et qui permet de borner
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre émérite Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Par défaut
    Tu devrais regarder du coté du "numericupdown" comme contrôle.

    Sinon tu met un label box au dessus de ton contrôle, ou tu pop un message via une msgbox avant qu'il ne saisisse le chiffre, en lui indiquant qu'il doit taper une valeur numérique comprise entre 1 et 100.

    Et pour répondre à ta question, je ne pense pas que tu puisses définir le type des informations saisies dans uen textbox (numérique, texte etc ...), et encore moins en fixé un interval (cas numérique).

  9. #9
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour

    Citation Envoyé par Arnaud Malabeux Voir le message
    Bonjour à tous

    J'ai une TextBox qui est en entrée ou en sortie.
    Dans cette TextBox je veux que l'opérateur saisie une valeur numérique comprise entre 0 et 100.
    Est il possible de définir simplement les minimum et maximum et surtout que c'est bien une valeur munérique qui a été saisie (non pas du texte).
    Tout cela pour éviter de faire des contrôles (if ... alors)

    merci
    Nul besoin de réinventer la roue.

    D'autant plus que cela a déjà été fait plus d'une fois.

  10. #10
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Pareil que Pol63 et méthylene.... C'est exactement ce à quoi sert un NumericUpAndDown.

    Ce Control permet de saisir via le clavier ou les petites flèches, avec un min un max... Et la propriété Value te retourne un Integer.

    Donc à mois de vraiment le faire soi même... Ca existe

  11. #11
    Membre éprouvé Avatar de Capitaine Kirk
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Mars 2005
    Messages : 98
    Par défaut
    bonsoir,

    si vraiment tu veux utiliser une textbox tu peux toujours verifier que la valeur entrée est numerique avec la function IsNumeric.

Discussions similaires

  1. [VBA-E]Entrée dans une textbox
    Par Ania dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/12/2006, 17h54
  2. liste du texte déjà entré dans un textbox
    Par horneth dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 22/10/2006, 17h37
  3. [VB.net] liaison entre table et textbox's
    Par collaud_vb dans le forum Windows Forms
    Réponses: 10
    Dernier message: 25/09/2006, 13h27
  4. [VB]Pb update entre mon group textbox(i) et ma DataSource
    Par MITCH31 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 31/01/2006, 09h23
  5. [Javascript] appui sur la touche entrée dans une textbox
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 02/01/2006, 11h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo