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 :

Calcul + TextBox > Gestion d'une erreure du caractere "" (null)


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    telodo
    Invité(e)
    Par défaut Calcul + TextBox > Gestion d'une erreure du caractere "" (null)
    Bonjour tous le monde !


    Me revoila ! Et je ne viens jamais les mains vides !

    Je suis entrain de realiser un programme pour calculer ses interets sur x annees.

    Mon probleme n°1 :

    Par defaut mes textBox recevant les données Budget/Taux/Duree contienne le caractere 0. Cependant si l'utilisateur efface 0 et laisse le textBox vide mon programme ne peut pas faire le calcul et donc il y a erreure ! Et je n'arrive pas vraiment a corriger cela.

    Voici le code n°1 :

    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
     
        Private Sub btnCalcul_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalcul.Click
     
            Dim Budget As Decimal = tbBudget.Text
            Dim Taux As Decimal = tbTaux.Text
            Dim Duree As Integer = tbDuree.Text
     
            Dim Total As Decimal = Budget * (1 + Taux / 100) ^ Duree
            Dim Gains As Double = Total - Budget
     
            Dim row0 As String() = {Budget & " €", Taux & " %", Duree & " année(s)", Gains & " €", Total & " €"}
     
            With Me.DataGridView.Rows
                .Add(row0)
            End With
     
            With Me.DataGridView
                .RowsDefaultCellStyle.BackColor = Color.White
                .AlternatingRowsDefaultCellStyle.BackColor = Color.LightGray
            End With
     
        End Sub
    Mon probleme n°2 :

    Suivant le nombre d'annee a calculer... Nous pouvons atteindre une somme totale de 12345.012345678890 € ! J'aimerais ne pouvois laisser afficher que 2 nombre apres la virgule...

    Mon probleme n°3 :

    Je bride la saisie de mes textBox a des caracteres numeriques, ce qui empeche d'ecrire des lettres mais aussi la ponctuation et en particulier la virgule pour le nombre decimal. Comment pouvoir autorise la virgule ? J'ai trouve quelques trucs sur le net mais ca ne fonctionnait pas ou peut etre je n'arrivais tout simplement pas a l'integrer dans mon code, pas faute d'essayer !

    Voici le code n°3

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        Private Sub tbTaux_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles tbTaux.KeyPress
     
            If Not Char.IsDigit(e.KeyChar) Then
                e.Handled = True
            End If
     
        End Sub
    De meme, si vous trouvez que l'on peu alleger mon code ou le raccourcir n'hesitez pas a me faire des propositions. Etant debutant je detailles tout et je suis certains que l'on peut surement faire le meme calcul ou la meme chose en moins de ligne...

    Je vous remercie d'avance du temps passer a me lire, a m'analyser puis a m'aider.

    Bonne journee a vous et bonne programmation !

  2. #2
    Membre expérimenté
    Inscrit en
    Novembre 2006
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 337
    Par défaut
    pour ton probleme numero 1 la reponse est facile :

    tu ajoute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    if  (tbBudget.Text <> "") or (tbTaux.Text <> "") or (tbDuree.Text <> "") then
     
    'la tu met ton code de calcul
    Dim Budget As Decimal = tbBudget.Text
    Dim Taux As Decimal = tbTaux.Text
    Dim Duree As Integer = tbDuree.Text
    .....
    else
     
    msgox("entrez une valeur dans le budget/taux/durée ")
     
    end if

  3. #3
    telodo
    Invité(e)
    Par défaut
    Impeccable ! Mon probleme n°1 est resolus ! Je t'en remercie. C'est aussi l'occasion pour moi d'en apprendre plus sur ce langage et pouvoir utiliser cela dans d'autres programmes !

    Qui est partant pour les 2 autres problemes ?

  4. #4
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Pour ton preblème 2, tu peux utiliser math.Truncate(Nombre) (n'oublit pas l'imports System.Math)

    Pour le problème 1, un try catch résout aussi bien le problème
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  5. #5
    telodo
    Invité(e)
    Par défaut
    La fonction Maths.Truncat fonctionne, elle coupe les decimales (j'ai pas chercher a ne faire apparaitre 2 chiffres apres la virgule encore...).

    En revanche pour mon probleme n°1, il persiste ! J'ai trouve un bug...

    Avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    if  (tbBudget.Text <> "") or (tbTaux.Text <> "") or (tbDuree.Text <> "") then
     
    'la tu met ton code de calcul
    Dim Budget As Decimal = tbBudget.Text
    Dim Taux As Decimal = tbTaux.Text
    Dim Duree As Integer = tbDuree.Text
    .....
    else
     
    msgox("entrez une valeur dans le budget/taux/durée ")
     
    end if
    Si les 3 TextBox sont null alors un MsgBox s'affiche ! MAIS ! Mais si 2 TextBox contiennent une valeure et la 3 eme n'en contiens pas >> ALORS il y a un bug.

    Je vais essayer avec un Try.

    L'autre solution pour conserver le "if <>" serait de decomposer tout.

  6. #6
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Citation Envoyé par telodo Voir le message
    La fonction Maths.Truncat fonctionne, elle coupe les decimales (j'ai pas chercher a ne faire apparaitre 2 chiffres apres la virgule encore...).

    En revanche pour mon probleme n°1, il persiste ! J'ai trouve un bug...

    Avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    if  (tbBudget.Text <> "") or (tbTaux.Text <> "") or (tbDuree.Text <> "") then
     
    'la tu met ton code de calcul
    Dim Budget As Decimal = tbBudget.Text
    Dim Taux As Decimal = tbTaux.Text
    Dim Duree As Integer = tbDuree.Text
    .....
    else
     
    msgox("entrez une valeur dans le budget/taux/durée ")
     
    end if
    Si les 3 TextBox sont null alors un MsgBox s'affiche ! MAIS ! Mais si 2 TextBox contiennent une valeure et la 3 eme n'en contiens pas >> ALORS il y a un bug.

    Je vais essayer avec un Try.

    L'autre solution pour conserver le "if <>" serait de decomposer tout.
    Utilise un Try Catch
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  7. #7
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2007
    Messages : 4
    Par défaut
    Pour le point 3, à insérer dans l'évenement KeyPress du textBox:

    'on accepte chiffres et point, ainsi que la touche back.

    'si c'est un point et qu'il y en a déja une dans le textbox, ou qu'il est tappé en premier caractère, on annule la saisie
    If Asc(e.KeyChar) = 46 And (CType(sender, TextBox).Text.IndexOf(".") > 0 Or CType(sender, TextBox).Text = "") Then e.Handled = True
    'si le caractere n'est pas un chiffre, back ou un point, on annule
    If Char.IsDigit(e.KeyChar) = False And Asc(e.KeyChar) <> System.Windows.Forms.Keys.Back And Asc(e.KeyChar) <> 46 Then e.Handled = True

  8. #8
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    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 202
    Par défaut
    Citation Envoyé par alain8550 Voir le message
    Pour le point 3, à insérer dans l'évenement KeyPress du textBox:

    'on accepte chiffres et point, ainsi que la touche back.

    'si c'est un point et qu'il y en a déja une dans le textbox, ou qu'il est tappé en premier caractère, on annule la saisie
    If Asc(e.KeyChar) = 46 And (CType(sender, TextBox).Text.IndexOf(".") > 0 Or CType(sender, TextBox).Text = "") Then e.Handled = True
    'si le caractere n'est pas un chiffre, back ou un point, on annule
    If Char.IsDigit(e.KeyChar) = False And Asc(e.KeyChar) <> System.Windows.Forms.Keys.Back And Asc(e.KeyChar) <> 46 Then e.Handled = True
    ce genre de truc peut être beaucoup plus compliqué si on veut traiter tous les cas de figure, genre si une partie du textbox est sélectionné
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    telodo
    Invité(e)
    Par défaut
    Ce n'est qu'un petit programme qui calcul les interets, je voulais limiter la saisie aux caracteres numeriques et alphabetiques ainsi qu'a une seule ponctuation celle de la decimale. Et en meme temps tester si il n'y avait qu'un seul caractere.

    Ce code qui m'a ete presente est beaucoup trop complique pour mon niveau, je n'y aurais pas parvenus seul ! Je suis donc entrain de le decortiquer et l'etudier afin de pouvoir le re-utiliser ulterieurement.

    Maintenant, c'est vrai que cela peut devenir beaucoup plus complexe comme autoriser le copier coller de valeures CTRL+V ou Clic-Droit+Clic.

    Petit a petit l'oiseau fait son nid !

  10. #10
    telodo
    Invité(e)
    Par défaut
    Pour clore ce "chapitre" dans ma vie de petit programmeur, je fait partager la source de mon programme qui reprends ce que nous avons vue ici. Afin d'aider d'eventuelles forumer.



    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
     
        Private Sub tbBudget_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles tbBudget.KeyPress
     
            If Asc(e.KeyChar) = 46 And (CType(sender, TextBox).Text.IndexOf(".") > 0 Or CType(sender, TextBox).Text = "") Then e.Handled = True
            If Char.IsDigit(e.KeyChar) = False And Asc(e.KeyChar) <> System.Windows.Forms.Keys.Back And Asc(e.KeyChar) <> 46 Then e.Handled = True
     
        End Sub
     
        Private Sub tbTaux_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles tbTaux.KeyPress
     
            If Asc(e.KeyChar) = 46 And (CType(sender, TextBox).Text.IndexOf(".") > 0 Or CType(sender, TextBox).Text = "") Then e.Handled = True
            If Char.IsDigit(e.KeyChar) = False And Asc(e.KeyChar) <> System.Windows.Forms.Keys.Back And Asc(e.KeyChar) <> 46 Then e.Handled = True
     
        End Sub
     
        Private Sub tbDuree_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles tbDuree.KeyPress
     
            If Asc(e.KeyChar) = 46 And (CType(sender, TextBox).Text.IndexOf(".") > 0 Or CType(sender, TextBox).Text = "") Then e.Handled = True
            If Char.IsDigit(e.KeyChar) = False And Asc(e.KeyChar) <> System.Windows.Forms.Keys.Back And Asc(e.KeyChar) <> 46 Then e.Handled = True
     
        End Sub
    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
     
        Private Sub btnCalcul_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalcul.Click
     
            If tbBudget.Text = "" Then Exit Sub
            If tbTaux.Text = "" Then Exit Sub
            If tbDuree.Text = "" Then Exit Sub
     
            Dim Budget As Decimal = tbBudget.Text
            Dim Taux As Decimal = tbTaux.Text
            Dim Duree As Integer = tbDuree.Text
     
            Dim Total As Decimal = Math.Round((Budget * (1 + Taux / 100) ^ Duree), 2)
            Dim Gains As Decimal = Math.Round((Total - Budget), 2)
     
            Dim row0 As String() = {Budget & " €", Taux & " %", Duree & " année(s)", Gains & " €", Total & " €"}
     
            With Me.DataGridView.Rows
                .Add(row0)
            End With
     
            With Me.DataGridView
                .RowsDefaultCellStyle.BackColor = Color.White
                .AlternatingRowsDefaultCellStyle.BackColor = Color.LightGray
            End With
     
        End Sub


    Pas de commentaire dans le code, desole. Mais tout est dit dans ce topic !

    Merci beaucoup de votre aide ! Decidemment j'aime de plus en plus cette communaute, reponse fiable rapide ! Je repars toujours satisfait !


  11. #11
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Citation Envoyé par telodo Voir le message

    Pas de commentaire dans le code, desole. Mais tout est dit dans ce topic !

    Merci beaucoup de votre aide ! Decidemment j'aime de plus en plus cette communaute, reponse fiable rapide ! Je repars toujours satisfait !

    Et nous aussi

    Merci d'avoir posté le code
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

Discussions similaires

  1. Gestion d'une erreur
    Par Just-Soft dans le forum Langage
    Réponses: 3
    Dernier message: 15/09/2008, 14h41
  2. Gestion d'une erreur de cmde Windows
    Par kenny49 dans le forum Windows XP
    Réponses: 1
    Dernier message: 23/04/2007, 12h35
  3. [VBA-E] Gestion d'une erreur #N/A
    Par Mut dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 07/04/2006, 20h17
  4. [VB6] Problème de textbox multiligne qui génére une erreur
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 20/02/2006, 16h21
  5. gestion d'une erreur
    Par Jeannotc dans le forum Bases de données
    Réponses: 8
    Dernier message: 25/06/2004, 18h04

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