Возбуждение исключения при попытке увидеть, выбран ли элемент в списке - PullRequest
0 голосов
/ 12 октября 2010

Я пытаюсь вызвать исключение, если пользователь нажимает кнопку удаления, но не выбирает элемент в списке.

Вот что у меня есть:

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);
}

Ответы [ 4 ]

2 голосов
/ 12 октября 2010

Используйте

SelectedIndex == -1

, чтобы узнать, что ничего не выбрано.

2 голосов
/ 12 октября 2010

Вы не должны использовать исключения для проверки значений.

Сделайте что-то вроде:

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

.

2 голосов
/ 12 октября 2010

Вам на самом деле не нужно выдавать исключение, вы можете сделать следующее:

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;
}
1 голос
/ 12 октября 2010

Тест неверен, проверьте на -1.И в нем отсутствуют круглые скобки, добавьте новое Exception ().

Это, однако, очень неуместный код по-разному.Это начинается с того, что выбрасывает Exception вместо объекта-объекта определенного исключения.Ваше предложение catch будет отлавливать каждое исключение, в том числе те, которые были вызваны другими ошибками, такими как ошибка в вашем коде.Вы говорите пользователю вводить что-то, когда она действительно это сделала.

Более того, исключения должны только использоваться в исключительных случаях.Нет ничего особенного в том, что пользователь забыл что-то сделать.Просто отобразите сообщение в операторе if (), а остальное - в предложении else.

Более того, вы даже не должны позволять пользователю попадать в эту ловушку.Установите для свойства Enabled кнопки «Удалить» значение true, только если вы видите, что она что-то выбрала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...