2013-04-29 2 views
-1

J'ai deux zones de texte, à partir desquelles j'essaie de collecter des données. Je les boucle en boucle, mais quand le programme est sur le point de collecter des données et qu'ils n'ont aucune valeur, ils sont vides, je reçois une exception de format disant: "La chaîne d'entrée n'était pas dans un format correct."Exception de format d'une zone de texte

if (this.Controls["txt_db0" + count].Text != null) 
{ 
    //if the value in the textbox is not null 
    int db = int.Parse((this.Controls["txt_db0" + count].Text)); 
    //set my "db" integer to the value of the textbox. 
} 

Je mets l'instruction if là pour filtrer s'il n'y a pas de valeur en eux, même quand je reçois l'exception du format, donc je dois faire quelque chose de mal.

+2

Mettez un point d'arrêt sur ' int db = ... 'et vérifie la valeur de this.Controls [" txt_db0 "+ count] .Text'. – zimdanen

+0

Eh bien cela dépend de ce que vous avez trouvé lors du débogage :) – phadaphunk

+0

'Alors quel format pourrait-il être dans la zone de texte que le compilateur ne peut pas analyser/convertir en int?' Je ne sais pas, quoi * pourrait-il être? * VOUS * devez parcourir votre code et découvrir quel type de valeurs 'int.Parse' échoue. Vous répondrez probablement à votre propre question dans le processus, et si ce n'est pas le cas, fournissez quelques informations nécessaires pour que quelqu'un puisse répondre à cette question. – tnw

Répondre

1

pour vérifier votre travail que vous pouvez le faire

int testInt; 
if (int.TryParse(this.Controls["txt_db0" + count].Text,out testInt)) 
{ 
    //if the value in the textbox is not null 
    int db = testInt; 
    //set my "db" integer to the value of the textbox. 
} 
else 
    MessageBox.Show(this.Controls["txt_db0" + count].Text + " Not an Int"); 
+1

La propriété Text des contrôles (dans le framework .NET) n'est jamais nulle. –

+0

@MartinMulder: oui :) vous avez raison, je modifie ma réponse – Akrem

0

int.Parse lancera une exception si:

  • La chaîne d'entrée contient des lettres, ou d'autres caractères spéciaux qui ne peuvent être reconnus comme nombre.
  • La chaîne d'entrée est une chaîne vide.

Si vous êtes sûr que vos chaînes d'entrée ne contiennent que des chiffres, vérifiez si votre chaîne est vide avant de convertir:

string input = this.Controls["txt_db0" + count].Text; 
int db = input == "" ? 0 : int.Parse(input); 

ou vous pouvez utiliser:

int db; 
if (!int.TryParse(this.Controls["txt_db0" + count].Text, out db)) 
    // Do something else.