2009-01-30 10 views
1

Le problème est avec la conversion de la valeur de la boîte txt, mais pourquoi?C# Pourquoi cette sous-chaîne ne fonctionne-t-elle pas? Erreur: la chaîne d'entrée n'était pas dans un format correct

string strChar = strTest.Substring(0, Convert.ToInt16(txtBoxValue.Text)); 

Erreur: la chaîne d'entrée n'était pas dans un format correct.

Merci à tous.

+0

Il serait utile d'afficher les valeurs de srtTest et txtBoxValue.Text –

+0

Le txtBoxValue était vide! Doh! –

+0

La question n'est pas inutile. Basique, mais pas inutile. +1 pour contrer -1. –

Répondre

5

txtBoxValue.Text ne contient probablement pas d'int16 valide.

+0

J'espère qu'il reviendra pour accepter votre réponse! (+1) –

+0

Hehe, je ne pense pas :) –

0

Un couple raisons le code pourrait être défectueux. Pour clouer vraiment vers le bas, mettre votre conversion court sur une nouvelle ligne, comme ceci:

short val = Convert.ToInt16(txtBoxValue.Text); 
string strChar = strTest.Substring(0, val); 

probablement la valeur txtBoxValue.Text n'est pas un court (il pourrait être trop grand, ou avoir des caractères alpha dans ce). Si elle est valide et que val est assigné, strTest peut ne pas avoir assez de caractères pour que la sous-chaîne fonctionne, bien que cela renvoie normalement une erreur différente. En outre, le deuxième paramètre de la sous-chaîne peut nécessiter un int (pas sûr, ne peut pas tester maintenant), vous devrez peut-être convertir en int32 au lieu de 16.

Quelle est la valeur de txtBoxValue.Text lors de vos tests ?

1

Une bonne façon d'éviter cette erreur est d'utiliser .tryParse (.net 2.0 et jusqu'à)

int subLength; 

if(!int.TryParse(txtBoxValue.Text,out subLength) 
    subLength= 0; 

string strChar = strTest.Substring(0, subLength); 

De cette façon, si txtBoxValue.Textdoes contiennent pas un numéro valide, sera mis en longueur partielle à 0;

1

Une chose que vous pouvez essayer est l'utilisation TryParse

Int16 myInt16; 
if(Int16.TryParse(myString, out myInt16) 
{ 
    string strChar = strTest.Substring(0, myInt16); 
} 
else 
{ 
    MessageBox.Show("Hey this isn't an Int16!"); 
} 
0

ASP.NET offre plusieurs contrôles de validation pour le contrôle de l'entrée utilisateur. Vous devriez utiliser quelque chose comme CompareValidator ou RegularExpressionValiditor dans votre WebForm si vous attendez un type d'entrée spécifique, par exemple un Integer.

Questions connexes