2010-09-16 4 views
0

Regardez ceci:SI Vous ne prenez aucune décision?

foreach(Object Item in comboBox1.Items) 
{ 
    if (Convert.ToString(Item) == Convert.ToString(dsGirasol.Tables["DatosGirasol"].Rows[contador][0])) 
    { 
     repetido = true; 
     break; 
    } 
    else 
    { 
     repetido = false; 
    } 
}​ 

Notez que les deux sorties possibles ont une messagebox. Cependant quand je cours ceci, rien n'apparaît du tout, et le reste du code continue à fonctionner ...

EDIT: Ajouté la boucle environnante!

+1

Pouvez-vous fournir un code supplémentaire? Il semble que cette déclaration pourrait causer une exception. – Nescio

+0

Je ne connais pas le contexte plus large dans lequel ce code existe, mais vous êtes * sûr * qu'il n'y a aucune exception qui est attrapée silencieusement ici? Avec un essai/catch silencieux autour de ceci, vous pourriez jeter un index de tableau hors de l'exception de limites et continuer à courir "normalement". Avez-vous essayé de passer le code dans le débogueur? – Quintus

+0

J'ai ajouté la boucle foreach. L'élément est comparé à une entrée dans une table (voir le commentaire à la première réponse). – fede

Répondre

2

Pourquoi voulez-vous le break pour? Essayez ceci:

if (Convert.ToString(Item) == Convert.ToString(dsMaiz.Tables["DatosMaiz"].Rows[contador][0])) 
{ 
    repetido = true; 
    MessageBox.Show("Encontre uno igual"); 
} 
else 
{ 
    repetido = false; 
    MessageBox.Show("Encontre uno diferente"); 
} 
+1

La coupure consiste à casser la boucle foreach dans laquelle se trouve ce code. Le "item" est un objet dans un ComboBox. Ce code compare une entrée dans une table aux entrées déjà dans le ComboBox. Si l'entrée peut déjà être trouvée dans la comboBox, alors la boucle est cassée. – fede

1

Essayez d'évaluer les parties gauche et droite de la condition avant d'évaluer l'égalité. Je peux seulement imaginer qu'il doit lancer une exception qui est silencieusement attrapée. Cela vous aidera à déboguer le problème.

par exemple:

var left = Convert.ToString(Item); 
var right = Convert.ToString(dsMaiz.Tables["DatosMaiz"].Rows[contador][0]); 
if (left == right) 
{ 
    ... 
} 
else 
{ 
    ... 
} 

EDIT: Maintenant que je vois que vous utilisez une boucle, revenir à l'essentiel, est la boucle même en cours d'exécution? Débogage low tech, vérifiez qu'il y a des éléments dans la combobox et que vous faites référence au combo que vous vouliez :)

+0

+1 pour les procédures de débogage et heuristiques, quelqu'un devrait vraiment commencer une page de ceux-ci! – Nescio

0

Ok c'est étrange, j'ai réussi à résoudre le problème en mettant chaque boucle sur une méthode séparée, et maintenant ça marche, merci pour l'aide de toute façon!

Questions connexes