Проверка C # перед выходом из события accept_button - PullRequest
6 голосов
/ 24 апреля 2009

Извините, если это глупый вопрос, но я здесь новичок.

У меня есть просто настраиваемый диалог с двумя кнопками: Принять и Отменить. Кнопка «Принять» - это кнопка «Принять» в форме.

Я хочу сделать некоторые проверки для события Accept_Click и решить, могу ли я закрыть диалоговое окно или нет, но каждый раз, когда он покидает этот метод, диалоговое окно автоматически закрывается и возвращает Ok.

Что я могу сделать, чтобы остановить закрытие диалога? или я должен делать что-то другим?

спасибо

Ответы [ 4 ]

10 голосов
/ 24 апреля 2009

У меня будет переменная уровня формы (назовите ее _ vetoClosing). В событии Click кнопки accept я бы запустил проверку и установил переменную на основе этого:

    private void acceptButton_Click(object sender, EventArgs e)
    {
        // Am I valid
        _vetoClosing = !isValid();
    }

Тогда в событии FormClosing я бы отменил закрытие, если _vetoClosing имеет значение true

    private void Form_FormClosing(object sender, FormClosingEventArgs e)
    {
        // Am I allowed to close
        if (_vetoClosing)
        {
            _vetoClosing = false;
            e.Cancel = true;
        }
    }

Отключение кнопки «Принять» является неоптимальным, поскольку вы теряете функциональность Enter to Press.

2 голосов
/ 24 апреля 2009

Я бы подтвердил, как меняются элементы управления, и включил бы кнопку «Принять» только в том случае, если вся форма действительна.

Это позволит вам сохранить кнопку в качестве кнопки по умолчанию (AcceptButton), но предотвратить ее появление.

1 голос
/ 03 января 2013

Более чистым решением было бы установить DialogResult на None:

private void acceptButton_Click(object sender, EventArgs e)
{
    if (!isValid()) {
        this.DialogResult = System.Windows.Forms.DialogResult.None;
    }
}
0 голосов
/ 24 апреля 2009

AcceptButton или CancelButton в форме установлены для этой кнопки? Если это так, попробуйте сбросить его и вручную установить DialogResult в вашем обработчике, когда вы хотите закрыть диалоговое окно.

...