VB.Net la Conversion de chaîne à double
J'ai un mal de bug dans mon programme, lorsqu'un utilisateur appuie sur le chèque(à calculer) bouton quand il n'y a pas d'entrée dans la zone de texte, le programme affiche cette erreur: "la Conversion de la chaîne "" de type 'Double' n'est pas valide." Je voudrais résoudre cela, mais je ne suis pas sûr de la façon de faire la conversion. Je pensais éventuellement CType mais j'entends parler de l'analyse. Comment puis-je aller à ce sujet? la zone de texte est appelé mskTxtInput et le bouton de l'objet est appelé btnCheck qui fait tout le calcul et le traitement.
Mise à jour: voici mon code à l'exception de la méthode d'analyse donc espérons que cela aide un peu!
Privé Sous btnCheck_Click(ByVal sender as System.Object, ByVal e as System.EventArgs) Handles btnCheck.Cliquez sur
pic1.Visible = False 'masquer l'image
pic1.Image = Ma.Les ressources.Un
note2.Image = Ma.Les ressources.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
- Merci de partager un peu de code où ce problème se pose.
- Ce n'est pas directement pertinentes à votre question, mais il semble que vous ne l'utilisez pas
Option Strict
. Je vous recommande de vous tourner que sur: le compilateur génère alors des avertissements sur le code dangereux qui vous fera économiser temps dans le long terme.
Vous devez vous connecter pour publier un commentaire.
Utiliser le
TryParse
méthode pour faire de l'analyse pour éviter de se faire une exception si le traitement échoue:=
opérateur avantThen
dans le code que vous avez posté, donc il ne sera pas exécuté. Supprimer cela et cela fonctionne. J'ai vérifié que le code affiche la boîte de message si le traitement réussit.TryParse
méthode, vous êtes ignorant si le traitement a fonctionné ou pas. Le messagte case est toujours montré, même si le traitement échoue.mskTxtInput.Text = totalNum
vous obtiendrez une exception parce que vous êtes à l'aide de la chaîne, au lieu de la valeur analysée, et parce que vous faites la comparaison, même si le traitement a échoué. Comme vous comparez une chaîne avec un nombre, il sera implicitement essayer de convertir la chaîne en nombre, et d'échouer.Essayez d'utiliser Double.Méthode TryParse (String, Double) plutôt
Quelque chose comme
dim iVar as integer
dim sStr comme une chaîne de caractères
sstr=""
ivar = val(sstr)
Utiliser la méthode statique
Double.TryParse()
. Si elle retourne true alors l'analyse a été un succès, et vous pouvez procéder à l'opération. Si elle retourne false, alors l'analyse n'a pas réussi, et vous devriez voir un message d'erreur (à l'aide deMessageBox
si vous le désirez) et abandonner l'opération.