2010-09-09 7 views
2

Une exception s'est produite. Exception est spécifiée coulée est pas valideException de programme C#

int s = (int)comboBox1.SelectedItem; 
+2

nous pouvons * * deviner que vous êtes Je me demandais pourquoi vous avez eu cette erreur, et comment vous en débarrasser ... mais ce serait bien si vous mettez un peu d'effort supplémentaire et en fait phra Je l'ai posé comme une question au lieu de nous laisser deviner. – mpen

+0

Essayez-vous d'obtenir l'index ou la valeur stockée dans la comboBox? Veuillez préciser, afin qu'une réponse significative puisse être donnée. – froeschli

+1

Une exception s'est produite.Pas une vraie question 'jeter une nouvelle Exception (" Pas une vraie question ");' –

Répondre

0
int s = comboBox.SelectedIndex 
+0

Quel est votre point de vue? – leppie

+1

@leppie Je ne serais pas très surpris si sheena voulait obtenir l'index de l'élément sélectionné, pas la valeur de l'élément sélectionné lui-même. Cette suggestion a donc un sens, même si c'est une hypothèse (que vous êtes presque obligé de faire, vu le peu d'information que contient la question). – Rob

+0

@Rob: Vous faites une hypothèse, je ne le suis pas. Quel est le problème avec l'obtention d'un int de l'élément sélectionné? Rien! – leppie

4

Cela signifie que la valeur des éléments du combobox n'est pas un int.

+1

Cette réponse est absolument correcte, mais inutile. L'OP ne sait toujours pas ce qu'il devrait faire. Je préférerais ces réponses éludées, ce qui est plus utile à un débutant. –

+0

@Danny: Eh bien cette question est complètement gonflée par des discussions tangentes maintenant, donc je ne suis pas sûr que OP sera capable de distiller quoi que ce soit de valeur, mais finalement, le tick accept est le seul marqueur de ce que OP a trouvé plus utile, donc je suis sûr que cela va se régler. Cela dit, je suis d'accord que les hypothèses formulées dans les réponses non votées ne sont pas insensées. C'est toujours une bonne pratique de souligner quand vous faites une hypothèse, cependant: "Hé, si ce que vous voulez faire est * A * alors vous pourriez faire, ceci, si vous vouliez vraiment dire * B * alors ..." –

+0

cela n'aide pas du tout à sheena du tout ... –

1

essayer

int s = int.Parse(comboBox1.SelectedItem.ToString()); 

vous ne pouvez pas convertir un objet à un int par simple diffusion. Si vous avez un string vous devez utiliser int.Parse() pour convertir un string en int.

Si vous insérez vos propres objets comme des éléments dans la liste déroulante vous pouvez jeter comboBox1.SelectedItem à votre type à la place.

ComboBox.SelectedItem.ToString() renvoie uniquement le contenu si vous avez inséré des objets chaîne dans la liste déroulante, une méthode plus fiable consiste à vérifier la propriété ComboBox.Text à la place. Cela vous permettra également de faire des économies grâce à la vérification null.

+0

'SelectedItem.ToString()' donnera quelque chose comme 'System.Net.UI.Controls.ComboBoxItem.OrWhatever' qui ne peut pas être analysé à un int. Cela ne fonctionnera pas du tout. –

+0

@David: Si le contenu est des chaînes, cela fonctionnera. Je vais éditer mon post pour recommander comboBox1.Text à la place. –

+0

@David Hedlund: De quoi parlez-vous? Il n'y a pas de zone de liste déroulante dans ASP.NET. – leppie

2

Vérifiez SelectedIndex> -1 ou SelectedItem! = Null

+0

Et comme @leppie dit qu'il suppose que toutes les valeurs de la comboBox sont ints –

-1

Vous essayez de jeter un ComboBox article à un int.

Essayez

int s = comboBox1.SelectedIndex; 

si vous voulez que l'index de l'élément.

+0

Pourquoi -1? Je ne pense pas que @Brissles est faux, sauf un défaut: 's = (int) comboBox1.SelectedIndex', pas' (int) 'est nécessaire car' SelectedIndex' est un 'int'. –

+0

@Danny: le -1 est probablement dû au fait que quelqu'un croise l'hypothèse que 'SelectedIndex' est ce que OP essayait d'obtenir. Je n'ai pas de problème avec l'hypothèse moi-même. Étant donné l'absence totale d'une véritable question, je suppose que nous sommes tous libres de remplir les blancs ici. –

+0

@David: Exactement. Certains OP ne décrivent pas bien leurs questions, ce n'est pas parce qu'ils sont paresseux ou qu'ils ne veulent pas. La raison en est probablement qu'ils ne sont pas familiers avec le problème. Je pense donc qu'une bonne réponse devrait souligner l'erreur, et donner une solution possible est beaucoup plus important. –

1

Si vous voulez obtenir la valeur qui est affichée dans la zone de liste déroulante, peut-être vous devriez essayer:

int s = (int)comboBox.SelectedValue; 
+0

Tout dépend de la manière dont vous gérez l'élément ValueMember. Mais si laissé par défaut et vide, cela devrait fonctionner. Mais si l'élément sélectionné échoue, cela échouera également. – leppie

+0

Oui. Mais sommes-nous supposés deviner ce genre de détails ...? – Paul

1

Exemple d'utilisation sur MSDN here

Mais vraiment, vous devez fournir plus de détails dans la question :)

estimation totale, mais une chose commune à faire peut-être pour stocker un identifiant de base de données dans une propriété de valeur comboboxes et le texte de l'élément de base de données dans la propriété de texte. Si c'est ce que vous faites, vous pouvez utiliser la syntaxe ci-dessous si vous savez avec certitude que la valeur de la liste déroulante est toujours convertible en int.

int i = (int)ComboBox1.SelectedValue.ToString(); 

ou si vous n'êtes pas sûr, il est toujours un int ... vous pouvez

try 
{ 
int i = int.Parse(ComboBox1.SelectedValue.ToString()); 
} 
catch 
{ 
//handle the non int situation here 
} 

ou

int i; 
bool result = int.TryParse(ComboBox1.SelectedValue.ToString(), out i); 

      if (result) 
      { 
       //you can use the variable i now 
      } 
      else 
      { 
       //The parse failed so handle a non int situation here 
      } 
1

Essayez Convert.ToInt32(combo.Items[combo.SelectedIndex].Value.ToString());