2010-11-18 6 views
1

J'ai un bogue dans mon programme où si un utilisateur appuie sur le bouton de vérification (calculer) quand il n'y a pas d'entrée dans la zone de texte, le programme affiche cette erreur: "Conversion from string" " taper 'Double' n'est pas valide. " Je voudrais résoudre ceci mais je ne suis pas sûr comment faire la conversion. Je pensais peut-être CType mais j'entends parler d'analyse. Comment je vais à ce sujet? la zone de texte est appelée mskTxtInput et l'objet bouton est appelé btnCheck qui effectue tout le calcul et le traitement.VB.Net Conversion de chaîne en double

Mise à jour: Ceci est mon code sauf la méthode d'analyse donc j'espère que cela aide un peu!

Private Sub btnCheck_Click (sender ByVal comme System.Object, ByVal e comme System.EventArgs) Poignées btnCheck.Click pic1.Visible = False « image cacher pic1.Image = My.Resources.A pic2.Image = My.Resources.F

Dim value As Double 
    If Double.TryParse(mskTxtInput.Text, value) = Then 
     MsgBox("parsing success") ' parsing worked, so use the value in here 
    Else 
     MsgBox("parsing failed") ' parsing failed, so alert the user to that fact 
    End If 


    If radAdd.Checked = True Then 
     totalNum = num1 + num2 


    End If 

    If radSub.Checked = True Then 
     totalNum = num1 - num2 

    End If 

    If radMulti.Checked = True Then 
     totalNum = num1 * num2 



    End If 

    If mskTxtInput.Text = totalNum Then 
     lblAns.Text = ("Correct!") 
     lblAns2.Text = ("Answer is " & totalNum) 
     pic1.Visible = True 
     wins = wins + 1 
     nScore = wins 



    Else 
     lblAns.Text = ("Incorrect") 
     lblAns2.Text = ("Answer should be " & totalNum) 
     pic2.Visible = True 

    End If 

    attempts = attempts + 1 
    If attempts = 5 Then 
     MessageBox.Show("Game Finished! ", "End Of Game", _ 
         MessageBoxButtons.OK, _ 
         MessageBoxIcon.Exclamation) 
     lblAns.Text = ("You scored " & wins & " Out of 5") 
     btnSpin.Enabled = False 
     pic1.Visible = False 
     pic2.Visible = False 
     lblAns2.Text = "" 
     lblAns2.Text = "Play again?" 
     btnCheck.Enabled = False 
     btnNew.Enabled = True 
     attempts = 0 
     wins = 0 
    End If 


    mskTxtInput.Clear() 
    mskTxtInput.Focus() 


End Sub 
+0

S'il vous plaît partager un code où ce problème se produit. – BeemerGuy

+0

Ceci n'est pas directement lié à votre question, mais il semble que vous n'utilisiez pas 'Option Strict'. Je vous recommande de l'activer: le compilateur génère ensuite des avertissements sur les codes dangereux qui vous feront gagner du temps à long terme. – MarkJ

Répondre

2

Utilisez la méthode TryParse pour faire l'analyse syntaxique pour éviter d'avoir une exception si l'analyse syntaxique échoue:

Dim value As Double 
If Double.TryParse(mskTxtInput.Text, value) Then 
    ' parsing worked, so use the value in here 
Else 
    ' parsing failed, so alert the user to that fact 
End If 
+0

Hey! J'ai utilisé votre code mais fait des admissions de messagebox de "parsing passé" et "parsing failed" et a continué à recevoir le "parsing failed" je peux montrer le code évidemment et espère qu'il aide un peu! –

+0

@William Mc: Vous avez mis un opérateur '=' devant 'Then' dans le code que vous avez posté, donc il ne fonctionnera pas. Enlevez cela et cela fonctionne. J'ai vérifié que le code montre la première boîte de message si l'analyse réussit. – Guffa

+0

J'ai enlevé l'opérateur = mais cela ne fonctionnait toujours pas :(VS met toujours en surbrillance cette ligne en jaune: Si mskTxtInput.Text = totalNum Puis –

0

iVar dim comme nombre entier SSTR dim sous forme de chaîne

SSTR = ""

ivar = val (SSTR)

0

Utilisez la méthode statique Double.TryParse(). Si elle renvoie true, l'analyse a réussi et vous pouvez poursuivre l'opération. Si elle renvoie false, l'analyse échoue et vous devez afficher un message d'erreur (en utilisant MessageBox si vous le souhaitez) et abandonner l'opération.