Как остановить выполнение DialogResult на основе условия? - PullRequest
5 голосов
/ 10 августа 2010

У меня проблема со следующим сценарием в Windows Forms:

Я создал форму с двумя кнопками, каждая кнопка была назначена с поведением DialogResult OK и DialogResult Cancel соответственно.Но исходя из определенных условий, мне нужно остановить выполнение кнопки ОК.Проблема в том, что если я только что сделал возврат, как это:

private void btnOk_Click(object sender, EventArgs e)
    {
        foreach(Control control in tblTable.Controls)
        {
            if (control.GetType() == typeof(TextBox))
            {
                 if (control.Text.Trim() == "")
                 {
                     control.Focus(); return;
                 }
            }
            else
            {

            }
        }
    }

Результат диалога продолжает возвращать ответ OK в родительскую форму.

Мне нужно остановить выполнение событияи не возвращать никакого ответа, пока пользователь не исправит информацию в форме.Другими словами, пользователь должен вернуться к форме, чтобы исправить любые отсутствующие или неправильные данные.

Ответы [ 3 ]

7 голосов
/ 04 апреля 2013

Как упоминает Ганс Пассант в комментарии, просто установите DialogResult на None!
Как это:

private void btnOk_Click(object sender, EventArgs e)
{
    if(ValidationFailed())
    {
        this.DialogResult = DialogResult.None;
        return;
    }
    //...
}
4 голосов
/ 10 августа 2010

Лично я бы не использовал DialogResult s для кнопок в этом сценарии.Я стремлюсь установить DialogResult только в тех случаях, когда есть только отдельные опции, которые не требуют какой-либо дополнительной логики (например, создание собственного MessageBox).

Я бы просто отправил DialogResult в случае успеха:

private void btnOk_Click(object sender, EventArgs e)
{
    if (allIsOK())
    {
        this.DialogResult = DialogResult.OK;
    }
}
1 голос
/ 10 августа 2010

Попробуйте подключиться к событию Forms Closing и использовать свойство Cancel аргументов события для отмены закрытия формы.

Вот веб-страница, на которой обсуждается идея; это VB, но вы поймете:

http://www.vbinfozine.com/t_wfdlg.shtml

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