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 :

Je m'emmele dans les conversions et ca mine mon projet [Débutant]


Sujet :

VB.NET

  1. #1
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Points : 145
    Points
    145
    Par défaut Je m'emmele dans les conversions et ca mine mon projet
    Bonjour,
    Ayant eu des souci dans les conversions sur un formulaire de calcul, que je n'arrive toujours pas a resoudre, j'ai crée un simple form sur un projet different et j'ai toujours le meme souci. Probleme de conversion entre string, doubles, etc .....

    un code tout simple

    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
    Public Class QICalcul
     
        Private valA As String
        Private valB As String
        Private valC As String
     
    'lancement du formulaire
    Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    End Sub
     
    ' A à le focus, son textbox est vide et son fond est pourpre. J'entre une valeur à la main comprise entre 42.00 et 50.00 (en tapant "," comme  separateur) 
    Private Sub A_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles A.GotFocus
            A.Text = ""
            A.BackColor = Color.Purple
    End Sub
     
    ' A perd le focus, son textbox contient la valeur entree precedemment et son fond passe en LightSlateGray. 
    Private Sub A_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles A.LostFocus
            A.BackColor = Color.LightSlateGray
            End Sub
     
    ' B à le focus, son textbox est vide et son fond est pourpre. J'entre une valeur à la main comprise entre 42.00 et 50.00 (en tapant "," comme  separateur) 
    Private Sub B_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles B.GotFocus
            B.Text = ""
            B.BackColor = Color.Purple
    End Sub
     
    ' B perd le focus, son textbox contient la valeur entree precedemment et son fond passe en LightSlateGray. 
    Private Sub B_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles B.LostFocus
            B.BackColor = Color.LightSlateGray
    End Sub
     
    ' Je clique sur le bouton calculer, j'obtiens la valeur C = -4 [1 - (b/a)^2]
    Private Sub Calculate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Calculate.Click
    valA = Convert.ToDouble(A.Text)
       valB = Convert.ToDouble(B.Text)
       valQICALCULE = Convert.ToDouble(QICALCULE.Text)
       QICALCULE.Text = -4 * (1 - ((B.Text / A.Text)^2))
    End Sub
    End Class
    sauf que rien ne fonctionne dans le calcul de C
    Le mode debug me dit
    Le format de la chaîne d'entrée est incorrect.
    pour valA = Convert.ToDouble(A.Text) - Idem pour ValB et rien ne s'affiche dans C

    Si j'enlève
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    valA = Convert.ToDouble(A.Text)
    valB = Convert.ToDouble(B.Text)
    Le debug ne me dit rien du tout et rien ne s'affiche dans C

    Vraiment j'ai un souci de compréhension avec les convert.
    Pourris je avoir une petite aide ?
    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    un breakpoint pour afficher le contenu de A.Text
    Je pense que ta chaine est vide et donc impossible à caster
    Pour eviter le problème utiliser Double.TryParse()
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  3. #3
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Points : 145
    Points
    145
    Par défaut
    Merci du conseil mais j'avoue ne pas bien comprendre ou je le mets mon Double.TryParse()
    J'ai fait un peu de VB6 il y a quelque temps mais le vb.net est bien plus rigoureux et j'ai de mauvaises habitudes ......

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    en regardant ton code je capte rien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private valA As String
    
    ...
    valA = Convert.ToDouble(A.Text)
    Convertir un string en double pour le stocker dans un string

    bon si valA est censer être un double alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Private valA As Double
    et dans ta methode Calculate_Click
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if(Not Double.TryParse(A.Text,valA)) 
    {
    MessageBox.Show("Erreur : ValA n'est pas un Double!!!")
    Exit Sub
    }
    ...
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 128
    Points : 168
    Points
    168
    Par défaut
    tout d'abord t'a déclaré tes valA, valB et valC en string
    et puis tu demande qui te les donne en double
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    valA = Convert.ToDouble(A.Text)
       valB = Convert.ToDouble(B.Text)
    à ta place je ferais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim valA, valB, valC as double
    et puis je ferais

    enfin, je ne vois pas c'est quoi ça
    KCP.Text / KC.Text

    Que représente KCP et KC

    j'espère que KC ne peut être = 0 (ça va déclancher une exception: division par 0)

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    Il faut aller dans les Outil->Options->Projet & Solution->VB default:
    Option Explicit On
    Option Strict On
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  7. #7
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Points : 145
    Points
    145
    Par défaut
    RE Getule

    Si je dim valA, valB, valC en double et qu'après je fais
    valA = Cdbl(A.text) j'ai une erreur de type
    cdb n'est pas déclaré et peut être inaccessible en raison de son niveau de protection
    La conversion de la chaîne "42.85" (en l'occurence ici ValA) en type 'Double' n'est pas valide.
    Idem pour B

    Pour les valeurs de A et B elle doivent être entrées à la main et comprises entre +42,00 et +50,00 donc a deux decimales

    Pour KCP et KP c'est une erreur de ma part, en fait initialement KC = A et KCP = B et j'ai oublié de substituer dans le code, j'edite avec le bon code

  8. #8
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Points : 145
    Points
    145
    Par défaut
    explicit et strict sont deja toutes les deux sur on c'est aussi pour cela que c'est plus difficile mais je prefere du code plus propre

  9. #9
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 128
    Points : 168
    Points
    168
    Par défaut
    au lieu de Cdbl, fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    valA=Convert.ToDouble(A.Text)

  10. #10
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Points : 145
    Points
    145
    Par défaut
    bon alors maintenant j'ai le bon resultat affiche, sauf que :
    - il faut que je clique 2 fois sur le bouton calcul
    la premiere fois il m'affiche "0"
    la seconde il m'affiche le bon calcul

  11. #11
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    remet ton code

    et bête question a quoi servent ValA, ValB? ils sont pas utiliser a premiere vue
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  12. #12
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Points : 145
    Points
    145
    Par défaut
    alors je remets mon code sachant que A, B et C sont des valeurs entrées a la main, comprises entre 36.00 et 40.00
    Pour moi ce sont des strings mais je peux me tromper
    Et C est la valeur telle que C = -4 [1 - ((B/A)^2)] pour moi c'est aussi un string

    mon code est :
    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
     
    Public Class QICalcul
        Dim valB, valA, valC As String
        Private Sub closeformcalcul()
            Me.Hide()
        End Sub
        Private Sub A_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles A.GotFocus
            A.Text = ""
            A.Refresh()
            A.BackColor = Color.Purple
        End Sub
        Private Sub A_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles A.LostFocus
            A.BackColor = Color.LightSlateGray
        End Sub
        Private Sub B_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles B.GotFocus
            B.Text = ""
            B.Refresh()
            B.BackColor = Color.Purple
        End Sub
        Private Sub B_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles B.LostFocus
            B.BackColor = Color.LightSlateGray
        End Sub
        Private Sub Calculate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Calculate.Click
            C.Text = (-4 * (1 - ((B.Text) / (A.Text) ^ 2))).ToString("0.00")
            valC = Convert.ToString(C.Text)
            valA = Convert.ToString(A.Text)
            valB = Convert.ToString(B.Text)
        End Sub
        Private Sub Buttonclose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Buttonclose.Click
            closeformcalcul()
        End Sub
    End Class
    et là, j'ai une erreur ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C.Text = (-4 * (1 - ((B.Text / A.Text) ^ 2))).ToString("0.00") ))
    (ToString("0.00") pour que mon resultat aie 2 decimales max)

    le texte en rouge est souligne et ca me dit option strict on interdit les conversion implicites de string en double

    Mais je ne comprends pas cette histoire de conversion implicite, j'ai jamais que c'etait des double dans ce code et quand bien même si je remplace string par Double, j'ai exactement le meme message d'erreur.
    c'est la que je peche dans vb.net

  13. #13
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    A premiere vue les commentaires qu'on a fait non servi à rien
    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
    51
     
    Public Class QICalcul
     
        Private Sub A_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles A.GotFocus
            A.Text = ""
            A.Refresh()
            A.BackColor = Color.Purple
        End Sub
        Private Sub A_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles A.LostFocus
            A.BackColor = Color.LightSlateGray
        End Sub
        Private Sub B_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles B.GotFocus
            B.Text = ""
            B.Refresh()
            B.BackColor = Color.Purple
        End Sub
        Private Sub B_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles B.LostFocus
            B.BackColor = Color.LightSlateGray
        End Sub
        Private Sub Calculate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Calculate.Click
     
        Dim valA, valB, valC As Double
     
        if(Not Double.TryParse(A.Text,valA)) 
       {
             MessageBox.Show("Erreur : ValA n'est pas un Double!!!")
             Exit Sub
        }
        if(valA<=36 || valA>=40)
        {
           MessageBox.Show("Erreur : ValA n'est pas compris entre 36 et 40!!!")
             Exit Sub
         }
        if(Not Double.TryParse(B.Text,valB)) 
       {
             MessageBox.Show("Erreur : ValB n'est pas un Double!!!")
             Exit Sub
        }
        if(valB<=36 || valB>=40)
        {
           MessageBox.Show("Erreur : ValA n'est pas compris entre 36 et 40!!!")
             Exit Sub
         }
     
           C.Text = (-4 * (1 - ((valB) / (valA) ^ 2))).ToString("0.00")
        End Sub
     
        Private Sub Buttonclose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Buttonclose.Click
            Me.Close()
        End Sub
    End Class
    ValC n'a pas l'air d'être encodé manuellement mais est est calculé...
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  14. #14
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    C.Text = (-4 * (1 - ((B.Text / A.Text) ^ 2))).ToString("0.00") )).(ToString("0.00") pour que mon resultat aie 2 decimales max)
    le texte en rouge est souligne et ca me dit option strict on interdit les conversion implicites de string en double
    Le message d'erreur est pourtant clair:
    B.Text est un String
    Il faut donc le convertir en numérique pour pouvoir faire des opérations arithmétique dessus
    Pour le convertir tu peux utiliser Double.Parse (Int.Parse,...) mais vu qu'il est encodé par l"utilisateur il faut utilisé TryParse pour être sur que le text rempli par l'utilisateur soit correcte.
    L'utilisateur peut écrire "10abc" dans la TextBox ce qui ne correspond pas à un Double et donc va généré une exception au moment de la conversion(Parse)
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  15. #15
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Points : 145
    Points
    145
    Par défaut
    merci de l'aide, j'ai compris le principe mais pas la syntaxe, en tout cas cela fonctionne .....
    Me reste plus qu'à faire une chose :
    - faire en sorte que A et B soient toujours a 2 decimales si on entre 43,2 il affiche 43,20)
    - que le "." soit accepte comme separateur

    donc si on entre au clavier "42.56", il affiche "42.56" et si on entre "42,56" il affiche "42.56"
    j'avais fait ceci pour le "."
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim DecimalSeparator As String
    en entête

    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub A_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles A.GotFocus
            If DecimalSeparator = "," Then A.Text = A.Text.Replace(".", ",")
            A.Text = ""
            A.Refresh()
            A.BackColor = Color.Purple
        End Sub
    pour A
    Visiblement cela ne fonctionne pas

  16. #16
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut decimalseparator et culture fr-FR
    Bonjour Attila
    "La ou Attila passe l'herbe ne repousse plus" Cours d'histoire .Invasions des Huns.
    Tu dois faire appel a Culture English car la bonne fonction "shared" toString accepte un parametre culture de type CultureInfo quand elle convertit un nombre en string......
    Pour la verification et la validation des valeurs entrees dans un controle TextBox il est de bonne pratique de la faire dans l'event Validated du TextBox...
    j'aurais plutot vu ca comme 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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    Imports System.Globalization
     
    Public Class frmQICalcul
    	'Declare au biveau classe pour accessibilite
    	'une variable CultureInfo vers l'affichage anglais
    	'des nombres
    	Dim ci As CultureInfo = New CultureInfo("en-US")
    	'declare au biveau classe nos variables pour accessibilite
    	Dim valA As Double
    	Dim valB As Double
    	Dim valC As Double
    	Public Sub New()
     
    		' Cet appel est requis par le Concepteur Windows Form.
    		InitializeComponent()
     
    		' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
    		A.ForeColor = Color.Red
    		B.ForeColor = Color.Red
    		C.ForeColor = Color.Red
     
    		'specifie affichage à 2 decimales
    		ci.NumberFormat.NumberDecimalDigits = 2
    	End Sub
    	Private Sub A_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles A.GotFocus
    		A.Text = ""
    		A.Refresh()
    		A.BackColor = Color.Blue
    	End Sub
    	Private Sub A_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles A.LostFocus
    		A.BackColor = Color.LightSlateGray
    	End Sub
    	Private Sub B_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles B.GotFocus
    		B.Text = ""
    		B.Refresh()
    		B.BackColor = Color.Blue
    	End Sub
    	Private Sub B_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles B.LostFocus
    		B.BackColor = Color.LightSlateGray
    	End Sub
     
     
     
    'serieusement raccourci le calculate
    	Private Sub btnCalculate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalculate.Click
    		valC = 0.0
     
    		If (valA <= 36 Or valA >= 40) Then
    			MessageBox.Show("Erreur : ValA n'est pas compris entre 36 et 40!!!")
    			Exit Sub
    		End If
    		If (valB <= 36 Or valB >= 40) Then
    			MessageBox.Show("Erreur : ValB n'est pas compris entre 36 et 40!!!")
    			Exit Sub
    		End If
    		Dim resultToDisplay = (-4 * (1 - ((valB) / (valA) ^ 2)))
    		'Affiche en "english"
    		C.Text = resultToDisplay.ToString(ci)
     
    	End Sub
    bon code................

  17. #17
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    rebonjour Attila
    Excuse-moi .Il y a un loupe dans le code communique car il manque le code de l'event validating de chaque textbox
    voici au complet le code precedent:

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
     
    Imports System.Globalization
     
    Public Class frmQICalcul
    	'Declare au niveau classe pour accessibilite
    	'une variable CultureInfo vers l'affichage anglais
    	'des nombres
    	Dim ci As CultureInfo = New CultureInfo("en-US")
    	'declare au biveau classe nos variables pour accessibilite
    	Dim valA As Double
    	Dim valB As Double
    	Dim valC As Double
    	Public Sub New()
     
    		' Cet appel est requis par le Concepteur Windows Form.
    		InitializeComponent()
     
    		' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
    		A.ForeColor = Color.Red
    		B.ForeColor = Color.Red
    		C.ForeColor = Color.Red
     
    		'specifie affichage à 2 decimales
    		ci.NumberFormat.NumberDecimalDigits = 2
    	End Sub
    	Private Sub A_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles A.GotFocus
    		A.Text = ""
    		A.Refresh()
    		A.BackColor = Color.Blue
    	End Sub
    	Private Sub A_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles A.LostFocus
    		A.BackColor = Color.LightSlateGray
    	End Sub
    	Private Sub B_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles B.GotFocus
    		B.Text = ""
    		B.Refresh()
    		B.BackColor = Color.Blue
    	End Sub
    	Private Sub B_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles B.LostFocus
    		B.BackColor = Color.LightSlateGray
    	End Sub
     
    	Private Sub Buttonclose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Buttonclose.Click
    		Me.Close()
    	End Sub
     
    	'serieusement raccourci le calculate
    	Private Sub btnCalculate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalculate.Click
    		valC = 0.0
     
    		If (valA <= 36 Or valA >= 40) Then
    			MessageBox.Show("Erreur : ValA n'est pas compris entre 36 et 40!!!")
    			Exit Sub
    		End If
    		If (valB <= 36 Or valB >= 40) Then
    			MessageBox.Show("Erreur : ValB n'est pas compris entre 36 et 40!!!")
    			Exit Sub
    		End If
    		Dim resultToDisplay = (-4 * (1 - ((valB) / (valA) ^ 2)))
    		'Affiche en "english"
    		C.Text = resultToDisplay.ToString(ci)
     
    	End Sub
    	'La fonction Double.TryParse ,comme toString est une fonction "shared"
    	'ou "partagee" qu'on peut appeler de partout.
    	'Redoutable .
    	'Lit en "english" , verifie si c'est un double
    	' renvoie le resultat dans valA
    	'Si valA =0 il y a erreur et 0.0 est affiche dans le controle A.text
    	Private Sub A_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles A.Validating
     
    		'Init valA
    		valA = 0.0
    		If Not Double.TryParse(A.Text, NumberStyles.AllowDecimalPoint, ci, valA) Then
    			MessageBox.Show("Erreur : " & TextBox1.Name.ToString & " n'est pas un Double!!!")
    			'Ecrit 0.0 dans A.text
    			A.Text = valA
    		Else
    			'simple label pourr le test
    			Me.LabelEcho.Text = valA.ToString(ci)
     
    		End If
    	End Sub
     
    	Private Sub B_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles B.Validating
    		valB = 0.0
    		If Not Double.TryParse(B.Text, NumberStyles.AllowDecimalPoint, ci, valB) Then
    			MessageBox.Show("Erreur : " & B.Name.ToString & " n'est pas un Double!!!")
    			B.Text = valB
    		Else
    			Me.LabelEcho.Text = valB.ToString(ci)
     
    		End If
    	End Sub
    End Class
    bon code et bonne soiree......

  18. #18
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Points : 145
    Points
    145
    Par défaut
    Bonjour MABROUKI

    Merci pour l'aide
    Je ne comprends pas toutefois, je tourne en rond ......
    J'explique :
    j'ai bien mis le code et n'ai aucune erreur
    j'entre une valeur, par exemple 42.25 dans le form, je tabule, je rentre par exemple 43,45

    je clique sur calculate et arfffffffffff j'ai deux messages qui bouclent :
    Erreur : A n'est pas un double
    et si je clique sur ok du msg d'erreur, second message :
    Erreur : ValA n'est pas compris entre 36 et 40
    et ainsi de suite.
    Bref je ne sors pas de la boucle des msgbox sans quitter le form

  19. #19
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    Dans le TryParse tu dois definir le format du séparateur

    TryParse
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  20. #20
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Points : 145
    Points
    145
    Par défaut
    je me reponds a moi même, ca y est j'ai enfin obtenu ce que je voulais
    un grand merci pour vos aides respectives

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

Discussions similaires

  1. Réponses: 45
    Dernier message: 23/07/2015, 20h00
  2. Récupérer les noms des classes de mon projet
    Par abdoutleti dans le forum Général Java
    Réponses: 10
    Dernier message: 10/03/2011, 12h17
  3. conversion de couleur dans les différents espaces
    Par karas.uchiwa dans le forum Traitement d'images
    Réponses: 1
    Dernier message: 16/12/2009, 09h53
  4. Conversion dans les 3 bases & heure binaire
    Par Mic** dans le forum Contribuez
    Réponses: 1
    Dernier message: 30/11/2008, 17h17

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