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 :

Calculer depuis une textbox


Sujet :

VB.NET

  1. #1
    Membre chevronné Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Par défaut Calculer depuis une textbox
    Bonjour à tous,

    Afin de m'entrainer je souhaite pouvoir calculer des nombres depuis une textbox de saisi ou l'utilisateur fournit les variables. (Cela peut être en décimal 0.002 par exemple)

    Je suis bloqué dans mon code avec l'erreur ,

    La conversion de la chaîne "0.2" en type 'Decimal' n'est pas valide.
    l'erreur se situe ligne 2, je ne vois pas comment vérifier et convertir la saisie de l'utilisateur dans une textbox


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub nbvaleurdogecoin_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nbvaleurdogecoin.TextChanged
            coursdogecoinn = CDec(coursdogecoin.Text)
            If IsNothing(nbvaleurdogecoin) Then
                Dim nbvaleurdogecoin As String = 1
            End If
            Dim montantdogecoin As Integer = nbvaleurdogecoin.Text
            System.Convert.ToDecimal(montantfinale)
            montantfinale.Text = montantdogecoin * valeurdogecoin & "€"
        End Sub

  2. #2
    Membre éclairé Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Par défaut
    Bonjour,

    Je ne suis pas capable de tester tout de suite, mais essaye avec des virgules au lieu des points, si ça marche, il faudra traiter la chaine de caractère pour changer les virgules en points si nécessaire. Et pour vérifier la saisie, deux possibilité :
    -On key down, vérifier si il s'agit d'un chiffre sinon un msgbox qui insulte.
    -Au moment de la validation : met un try catch autour de ton cast, et encore une fois si catch : insulte.

  3. #3
    Membre chevronné Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Par défaut
    J'ai essayé de faire comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim coursdogecoinn As Integer = coursdogecoin.Text
    Cependant ils me retournent toujours :

    La conversion de la chaîne "0.2" en type 'Integer' n'est pas valide.

  4. #4
    Membre éclairé Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Par défaut
    Essaye comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    coursdogecoinn = CDec(coursdogecoin.Text.Replace(".", ","))
    Et sinon je comprend pas cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Convert.ToDecimal(montantfinale)
    Elle fonctionnera pas celle là.

  5. #5
    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
    la transformation d'un string en nombre se fait selon le paramétrage de windows, au niveau de la culture
    sur les windows français le séparateur de décimal est la virgule et non le point comme dans certains pays
    il y a une propriété qui peut te donner le séparateur de décimal de la machine, si tu souhaites que ton appli fonctionne sur tous les pc, pour faire un replace vers ce caractère
    http://msdn.microsoft.com/fr-fr/libr...vs.110%29.aspx
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,

    Citation Envoyé par Lekno Voir le message
    J'ai essayé de faire comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim coursdogecoinn As Integer = coursdogecoin.Text
    Cependant ils me retournent toujours :
    La conversion de la chaîne "0.2" en type 'Integer' n'est pas valide.
    Un décimal ne peut pas aller dans un entier
    Sinon voir la réponse de Pol63

    Mais il faudrait bien séparer les choses (saisie et calculs, et éventuellement faire une function qui effectue les calculs) afin d'être clair — parceque là tu mélanges tout ; textbox et variable décimale.
    1 - vérification des saisies
    2 - Calculs
    3 - affichage dans la textbox de resultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ' ce code n'est pas dans l'événement TextChanged de la textbox nbvaleurdogecoin - le point aura déjà été corrigé - voir explication de Pol63
            Dim dec As Decimal
            If Decimal.TryParse(nbvaleurdogecoin.Text, dec) Then
                ' mes calculs avec dec
                ' ...
            Else
                MessageBox.Show("format incorrect")
            End If
    Je me demande comment cela peut fonctionner
    Citation Envoyé par Lekno Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            If IsNothing(nbvaleurdogecoin) Then
                Dim nbvaleurdogecoin As String = 1
            End If
    Ou plutôt si, je sais, nbvaleurdogecoin est un textbox défini en design et dans le if tu déclares une variable du même nom, le seul problème est qu'en sortant du if cette variable est détruite. (sinon tu aurais eu un : la variable 'nbvaleurdogecoin' masque une variable dans un bloc englobant dans l'EDI dans les erreurs) Ta textbox nbvaleurdogecoin ne vaudra jamais 1.

    A mon avis, voici un lien qui te sera très utile, le Cours VB.NET de Philippe Lasserre est une mine d'information, très bien pour apprendre.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  7. #7
    Membre chevronné Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Par défaut
    Merci pour vos explications !!

    J'en suis arrivé à cela, c'est fonctionnel mais je ne suis pas certain que les standards soient respectés....

    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
     
    Public Class Form1
     
        'Fonction de calcul finale qui recoit comme argment le montant de la banque ainsi que le cours de la devise a calculer
        Function courscryptomonnaie(ByVal argument1 As Decimal, ByVal argument2 As Decimal) As Decimal
            Return argument1 * argument2
        End Function
     
        Dim decimalcoursdogecoin As Decimal
        Dim nombrededogecoin As Decimal
     
        Private Sub coursdogecoin_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles coursdogecoin.TextChanged
            Dim dec As Decimal
            If Decimal.TryParse(coursdogecoin.Text, dec) Then
                decimalcoursdogecoin = coursdogecoin.Text
            Else
                coursdogecoin.Text = 0
            End If
        End Sub
     
        Private Sub montantdedogecoin_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles montantdedogecoin.TextChanged
            Dim dec As Decimal
            If Decimal.TryParse(montantdedogecoin.Text, dec) Then
                nombrededogecoin = montantdedogecoin.Text
                montantfinale.Text = courscryptomonnaie(nombrededogecoin, decimalcoursdogecoin) & "€"
            Else
                montantdedogecoin.Text = 0
            End If
        End Sub
    End Class

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Dans montantdedogecoin tu vérifies que la saisie est décimale et la place dans dec. Utilise dec dans l'affectation, cela évite les cast implicite. (sinon un parse aurait suffit)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Private Sub montantdedogecoin_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles montantdedogecoin.TextChanged
            Dim dec As Decimal
            If Decimal.TryParse(montantdedogecoin.Text, dec) Then
                nombrededogecoin = dec
            Else
                montantdedogecoin.Text = 0
            End If
        End Sub
    Faire le calcul à chaque changement de caractère saisie n'est pas forcement judicieux, il vaut mieux le faire lorsque le contrôle pers le focus.
    Normalement tu généres l'évènement pour chaque contrôle.
    Mais afin d'éviter de dupliquer le code pour le calcul, il suffit de faire une méthode rattachée aux évènements leave des 2 contrôles concernés. (Calcul_Leave remplace montantdedogecoin_Leave et coursdogecoin_Leave mis en commentaie dans le code)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Private Sub Calcul_Leave(sender As System.Object, e As System.EventArgs) Handles montantdedogecoin.Leave, coursdogecoin.Leave
            montantfinale.Text = courscryptomonnaie(nombrededogecoin, decimalcoursdogecoin) & "€"
        End Sub
     
        'Private Sub coursdogecoin_Leave(sender As System.Object, e As System.EventArgs) Handles coursdogecoin.Leave
        '    montantfinale.Text = courscryptomonnaie(nombrededogecoin, decimalcoursdogecoin) & "€"
        'End Sub
     
        'Private Sub montantdedogecoin_Leave(sender As System.Object, e As System.EventArgs) Handles montantdedogecoin.Leave
        '    montantfinale.Text = courscryptomonnaie(nombrededogecoin, decimalcoursdogecoin) & "€"
        'End Sub
    Sinon souvent les textbox sont nommés txtLeNomQuiVaBien (ex : txtCoursdogecoin) c'est plus des conventions mais c'est explicite dans le code.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  9. #9
    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
    Citation Envoyé par rv26t Voir le message
    Faire le calcul à chaque changement de caractère saisie n'est pas forcement judicieux, il vaut mieux le faire lorsque le contrôle pers le focus.
    c'est plus une question de point de vue que de respect des standard
    moi je préfère aussi une interface qui se met à jour instantanément plutot que d'être obligé de cliquer ailleurs

    même sur du filtre de dizaines de millier de lignes je le fais préfère démarrer un thread sur le textchanged et l'arrêter si nécessaire pour en relancer un autre dans la seconde (enfin je délaye légèrement pour en éviter un peu quand même)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    c'est plus une question de point de vue que de respect des standard
    Effectivement cela n'a rien à voir avec le standard, simplement il me semble plus judicieux de lancer un calcul (parce qu'il sagit d'un calcul dans ce cas) quand la saisie est faite.
    Après si on en a besoin à la volée pour simuler, pourquoi pas. Dans ce cas le mettre sur le TextChanged des 2 controles.
    Quand il sagit de filtre effectivement on souhaite la réponse instantanément, donc le TextChanged.
    Tout dépend de l'utilité au final.
    Merci tout de même pour ta précision.

    [Edit]
    Tiens, j'ai oublié d'indiquer lorsque l'on place des nombres dans un texte il vaut mieux utiliser .ToString (évite le cast implicite)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    montantfinale.Text = courscryptomonnaie(nombrededogecoin, decimalcoursdogecoin).ToString & "€"
    Tu pourra le constater si tu utilises l'option Strict On avec des variables (string et decimal par exemple) ou avec montantdedogecoin.Text = 0 qui donne On interdit les conversions implicite de 'Integer' en 'String' dans la liste d'erreur de l'EDI.
    Etrangement avec une function (decimal comme dans l'exemple ici) il ne dit rien
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  11. #11
    Membre chevronné Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Par défaut
    Merci pour vos retours (je récupère une connection enfin ... ) je vais bien prendre note pour les conversions de type de variable ( c'est ce qui me posait problème) je passe en résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PowerShell] Rechercher logiciel depuis une textBox
    Par Unfam0us dans le forum Scripts/Batch
    Réponses: 12
    Dernier message: 06/12/2010, 09h24
  2. calcul depuis une requete
    Par berti dans le forum Langage
    Réponses: 5
    Dernier message: 16/05/2008, 11h10
  3. [Calcul] Bug lors d'un calcul depuis une saisie TextBox.
    Par telodo dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 28/09/2007, 02h15
  4. Réponses: 2
    Dernier message: 04/09/2007, 14h53
  5. [C++.NET] Extraction de nombres depuis une TextBox
    Par KaeRZed dans le forum VC++ .NET
    Réponses: 4
    Dernier message: 19/04/2006, 14h57

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