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

  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
    telodo
    Invité(e)
    Par défaut
    Voila je viens de faire le Try Catch durant ta reponse... !

    Effectivement ca fonctionne et sans bug ! J'avais deja utilise cela lors d'un precedant programme mais je n'avais pas assez bien compris son fonctionnement pour l'appliquer reellement.

    Et ca fonctionne sas probleme ! Pas de bug...


    Quelqu'un pour le probleme 3 ? Allez on y est presque ! Je voudrais autoriser la "," ou le "." pour pouvoir saisir un decimal dans le textbox !

    Motivé !

  8. #8
    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 : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    pour ton probleme numéro 1, le truc c'est que quand un textbox est vide, tu ne pas faire le calcul, alors ne le fait pas
    au debut de ton calcul, tu vérifies si tes textbox sont vide, auquel cas tu ne vas pas plus loin dans la sub

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if textbox.Text = "" then exit sub

    pour le probleme 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    system.math.round(nombre,nombre de chiffre apres la virgule)
    doit exister ...


    pour le probleme numéro 3 j'ai posté le code d'un textbox qui permet de dire qu'on ne veut que des nombres dans le textbox
    il te suffit de l'ajouter dans ton projet et ensuite de posser ce textbox modifié à la place d'un textbox normal
    donc regarde par là :http://developpez.net/forums/showthread.php?t=424954


    d'une manière générale, je te conseille de prendre quelques cours de programmation, et de recherche
    par exemple la touche F1 ouvre une menu d'aide, tu y tapes ce que tu veux et ca te dis comment faire, genre tu aurais tapé arrondi ca t'aurais proposé round


    @aspic: un try catch ne vaut pas une programmation correcte !
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    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
    Voila je viens de faire le Try Catch durant ta reponse... !

    Effectivement ca fonctionne et sans bug ! J'avais deja utilise cela lors d'un precedant programme mais je n'avais pas assez bien compris son fonctionnement pour l'appliquer reellement.

    Et ca fonctionne sas probleme ! Pas de bug...


    Quelqu'un pour le probleme 3 ? Allez on y est presque ! Je voudrais autoriser la "," ou le "." pour pouvoir saisir un decimal dans le textbox !

    Motivé !
    Tu veux autoriser la virgule et le point mais écrire des décimals ?? c'est pas logique...

    Tu veux qu'on entre 10.5 dans ta TextBox ou seulement 10 ?

    De plus, un rappel en vb.net ce sont les points qui sont pris en compte pour les décimales donc la virgule va planter le programme...
    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 !

  10. #10
    telodo
    Invité(e)
    Par défaut
    Je souhaiterais un 10.5 ! En France c'est 10,5 en US 10.5 ; je ne savais pas trop lequel des deux prendre. Donc pour le . !

    Pour la programmation correcte avec un if "" then exist sub, me parait parfait aussi. Je le tenterais.

    pour le F1, je le fais une fois tous les 1/4 d'heure. Mais la doc pour vb.net est bizarre a mon gout. Exemple je copie colle les exemple microsoft, mais ca ne fonctionne pas chez moi ; et de plus c'est du console apparement donc apres j'adapte.

    Pour l'arrondis j'avoue ne pas avoir cherche, je devais poster pour gerer la valeure nulle d'une txtbox donc j'en ai profite pour tout reunir dans 1 topic !

    Merci de votre aide je vais essayer cela !

  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
    Tien va voir la :
    http://www.developpez.net/forums/showthread.php?t=32562

    Sinon tu peux tester ta chaine et voir q'il y a une point dans l'expression...
    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 !

  12. #12
    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

  13. #13
    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 : 44
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    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

  14. #14
    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 !

  15. #15
    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 !


  16. #16
    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