2010-10-12 7 views
0

Je tente d'élever une exception si un utilisateur clique sur le bouton Supprimer mais ne sélectionne pas un élément dans la zone de liste.Levée d'une exception lors de la tentative de voir si un élément est sélectionné dans une zone de liste

C'est ce que j'ai:

try 
{ 
    if (dataListBox.SelectedIndex == null) 
     throw new Exception; 

    //deletes selected items 
    dataListBox.Items.RemoveAt(dataListBox.SelectedIndex); 
    isDirty = true; 
} 
catch (Exception err) 
{ 
    //spits out the errors if there are any 
    MessageBox.Show(err.Message, "Enter something into the txtbox", MessageBoxButtons.OK, MessageBoxIcon.Error); 
} 
+2

N'utilisez pas d'exceptions pour cela. Et, dans tous les cas, ne lancez pas une instance de System.Exception; utiliser des types plus spécifiques. S'il vous plaît voir http://msdn.microsoft.com/en-us/library/seyhszts.aspx – CesarGon

+0

Le résultat de votre si la comparaison sera toujours 'false' puisque' SelectedIndex' est un int, et int n'est jamais égal à 'null '. – digEmAll

Répondre

2

Utilisez

SelectedIndex == -1 

savoir que rien n'est sélectionné.

+0

merci mec, a fait l'affaire –

+1

De rien, mais je suis d'accord avec les autres réponses. Une exception n'est pas la meilleure solution ici, et si c'était le cas, un type d'exception spécifique est recommandé. – Timores

2

Vous avez vraiment pas besoin de lancer une exception ici, vous pourriez faire ce qui suit:

if (dataListBox.SelectedIndex == -1) 
{ 
    MessageBox.Show(err.Message, "Enter something into the txtbox", MessageBoxButtons.OK, MessageBoxIcon.Error) 
} 
else 
{ 
    //deletes selected items 
    dataListBox.Items.RemoveAt(dataListBox.SelectedIndex); 
    isDirty = true; 
} 
2

Vous ne devez pas utiliser d'exceptions pour vérifier les valeurs.

faire quelque chose comme:

if (dataListBox.SelectedIndex >= 0) 
{ 
    //standard flow code 
} 
else 
{ 
    MessageBox.Show("Enter something into the txtbox",_ 
MessageBoxButtons.OK, MessageBoxIcon.Error); 
} 

à la place.

1

Le test est incorrect, vérifiez pour -1. Et il manque les parenthèses, lancez une nouvelle exception().

Il s'agit cependant d'un code très inapproprié de plusieurs façons différentes. Cela commence par lancer Exception au lieu d'un objet de classe dérivée d'exception spécifique. Votre clause de capture va attraper chaque exception, y compris ceux lancés par d'autres mésaventures comme un bug dans votre code. Vous dites à l'utilisateur d'entrer quelque chose quand elle l'a fait.

De plus, les exceptions seulement doivent être utilisées dans des circonstances exceptionnelles. Il n'y a rien d'exceptionnel à ce que l'utilisateur oublie de faire quelque chose. Affichez simplement le message dans l'instruction if(), faites le reste dans la clause else.

En outre, vous ne devriez même pas permettre à l'utilisateur de tomber dans ce piège. Définissez uniquement la propriété Enabled du bouton Supprimer sur true lorsque vous voyez qu'elle a sélectionné quelque chose.