Сохранить диалог, который будет открыт после результата ShowDialog - PullRequest
0 голосов
/ 20 сентября 2010

Я открываю модальное диалоговое окно с просьбой заполнить определенные поля.

if(dlgUserDetail.ShowDialog() == DialogResult.OK)
{ 

}

При нажатии кнопки ОК элемент управления переходит в родительскую форму, где я проверяю введенные пользователем данные.

Если проверка не удалась, я хотел оставить диалоговое окно открытым.со старыми ценностями.Поскольку это модальный диалог, форма закрывается.

Кажется, это общая проблема, поскольку я вижу много дискуссий в сети, но нигде не смог найти решение.

Пожалуйста, дайтея знаю, как решить эту проблему.Спасибо.

С уважением ArunDhaJ

Ответы [ 2 ]

1 голос
/ 20 сентября 2010

Если это ваш диалог, вы можете добавить CancelEventArgs событие с именем Validate или InputOk (аналогично FileOk в OpenFileDialog) и иметь свою основную форму для проверки ввода в методе. Перед вызовом DialogResult = DialogResult.OK в вашем диалоге вы добавляете вызов «onValidate», чтобы проверить, является ли введенный код действительным.

{
    // dialog
    {
        if (onValidate()) {
            DialogResult = DialogResult.OK;
        }
    }

    private bool onValidate() {
       CancelEventHandler handler = Validate;
       if (handler == null) {
           return true;
       }
       CancelEventArgs args = new CancelEventArgs();
       handler(this, args);
       return args.Cancel;
    }
}

{
    // form
    {
        dlgUserDetail.Validate += valid;
        if(dlgUserDetail.ShowDialog() == DialogResult.OK) { }
    }

    private void valid(object sender, CancelEventArgs e) {
        // check input and set
        e.Cancel = true;
        // if not valid
    }
}
1 голос
/ 20 сентября 2010

Одно из решений - поместить логику проверки в форму dlgUserDetail и вызвать ее при событии OnClosing.Если проверка не удалась, запретите закрытие формы.

...