none
Bug avec Visual Basic 2005 et Decimal.TryParse RRS feed

  • Question

  • Bonjour,

    J'ai changé d'ordinateur. Je suis passé d'un ordinateur avec Windows XP 32 bits à un ordinateur avec Windows 7 64 bits.

    J'ai créé une application avec Visual Basic 2005 qui fonctionnait bien sur l'ancien ordinateur mais qui pose problème avec le nouvel ordinateur.

    Dans le code ci-dessous, la commande  If Decimal.TryParse(strMontant, decMontant) Then renvoie toujours la valeur False même si je suis certain d'entrer correctement la valeur. J'ai essayé avec un montant entier sans décimal, avec un un montant utilisant le point décimal, avec un montant utilisant la virgule décimale, rien ne marche.

    Voici le code.

        Private Function PublicOptionsValid() As Boolean

            Dim strErrorMessage As String = String.Empty
            Dim ci As System.Globalization.CultureInfo = My.Application.Culture
            Dim strDecimalChar As Char = ci.NumberFormat.CurrencyDecimalSeparator
            Dim strMontant As String = "", decMontant As Decimal = 0

            Do While True

                With txtTauxInd
                    .Text = .Text.Trim
                    If .Text = String.Empty Then
                        strErrorMessage = "Vous devez indiquer une valeur pour le taux d'adhésion des individus."
                        tabOptions.SelectedTab = tabOptions.TabPages(0)
                        .Focus()
                        Exit Do
                    End If
                    If .Text.Contains(".") Then
                        strMontant = .Text.Replace(".", strDecimalChar)
                    ElseIf .Text.Contains(",") Then
                        strMontant = .Text.Replace(",", strDecimalChar)
                    End If
                    If Decimal.TryParse(strMontant, decMontant) Then
                        If decMontant = 0 Then
                            strErrorMessage = "Vous devez indiquer une valeur pour le taux d'adhésion des individus."
                            tabOptions.SelectedTab = tabOptions.TabPages(0)
                            .Focus()
                            Exit Do
                        ElseIf decMontant < 0 Then
                            strErrorMessage = "Vous devez indiquer une valeur positive pour le taux d'adhésion des individus."
                            tabOptions.SelectedTab = tabOptions.TabPages(0)
                            .Focus()
                            Exit Do
                        Else
                            .Text = String.Format("{0:#.00}", decMontant)
                        End If
                    Else
                        strErrorMessage = "Le texte entré n'est pas un montant valide pour le taux d'adhésion " & _
                                          "des individus."
                        tabOptions.SelectedTab = tabOptions.TabPages(0)
                        .Focus()
                        Exit Do
                    End If
                End With

                ' Autre code pour valider d'autres contrôles.
                ..................

                Exit Do

            Loop

            If strErrorMessage <> String.Empty Then
                MessageBox.Show(strErrorMessage, "Attention", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                Return False
            Else
                Return True
            End If

        End Function

    Merci.

    jeudi 20 novembre 2014 16:31

Réponses

  • Bonjour,

    Pour Windows XP, la méthode Decimal.TryParse() est compatible avec .NET Framework 4 au maximum. Quelle est votre version .NET installée sur Windows XP et sur Windows 7?

    Si c’est problème de code consultez cet article:

    Parsing Numeric Strings in the .NET Framework

    J’espère qu’il vous sera utile.

    Si le problème est résolu, s’il vous plaît partagez la solution avec nous afin que la réponse puisse être trouvée et utilisée par d'autres membres de la communauté ayant des questions similaires.

    Merci de nous tenir au courant.

    Cordialement,

    Nina


    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    lundi 1 décembre 2014 11:21
    Modérateur

Toutes les réponses

  • Bonjour,

    J'ai mis un coup d'œil sur le code, mais je ne peux pas trouver le problème là. Je vous conseille d'utiliser la nouvelle version de Visual Studio Community 2013 Update 4 qui est gratuite. D'habitude, la conversion d'un projet vers une version plus récente est sans problème.

    Cordialement,

    Nina


    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    vendredi 21 novembre 2014 14:27
    Modérateur
  • Bonjour,

    Merci pour la suggestion mais mon application doit pouvoir s'exécuter avec Windows XP.

    vendredi 21 novembre 2014 15:49
  • Bonjour,

    Pour Windows XP, la méthode Decimal.TryParse() est compatible avec .NET Framework 4 au maximum. Quelle est votre version .NET installée sur Windows XP et sur Windows 7?

    Si c’est problème de code consultez cet article:

    Parsing Numeric Strings in the .NET Framework

    J’espère qu’il vous sera utile.

    Si le problème est résolu, s’il vous plaît partagez la solution avec nous afin que la réponse puisse être trouvée et utilisée par d'autres membres de la communauté ayant des questions similaires.

    Merci de nous tenir au courant.

    Cordialement,

    Nina


    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    lundi 1 décembre 2014 11:21
    Modérateur
  • Bonjour,

    Merci pour l'information. Vous avez sûrement mis le doigt sur la cause du problème.

    Je n'ai pas le temps de gosser sur des histoires de version du framework. J'ai remplacé TryParse par une structure Try...Catch...End Try et ça fonctionne.

    Merci.

    lundi 1 décembre 2014 15:44