Закрытие формы Windows с помощью кнопки «Закрыть окно», когда отображается сообщение проверки - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть форма Windows, в которой есть событие проверки для textBox, так что, если значение этого TextBox является значением, которое уже существует, оно вызывает ошибку проверки.

    private void txtUsername_Validating(object sender, CancelEventArgs e)
    {
        var alreadyExists = _logic.UserIdExists(txtUsername.Text.Trim());

        if(alreadyExists)
        {
            errorProvider1.SetError(txtUsername, "This Userid already exists, please choose an alternative");
            e.Cancel = true;
        }                       
    }

    private void txtUsername_Validated(object sender, EventArgs e)
    {
        errorProvider1.SetError(txtUsername, "");
    }


        this.txtUsername.Validating += new System.ComponentModel.CancelEventHandler(this.txtUsername_Validating);
        this.txtUsername.Validated += new System.EventHandler(this.txtUsername_Validated);

Это приводит к появлению изображения ошибки рядом с этим текстовым полем вместе с сообщением об ошибке всплывающей подсказки.

Если я попытаюсь закрыть приложение, используя кнопку «Закрыть» в верхней части окна, в настоящее время я не смогу, так как указанное выше событие продолжает срабатывать, даже когда я пытаюсь закрыть окно (из-за того, что я отвел фокус от Текстовое поле).

Есть ли способ закрыть окно, не прибегая к созданию дополнительной кнопки Закрыть на форме?

1 Ответ

0 голосов
/ 08 ноября 2018

Исходя из вашего описания, вы хотите сохранить режим автоматической проверки по умолчанию, но при этом разрешить закрытие формы с помощью кнопки закрытия строки заголовка. Я заметил, что событие Form.Closing возникает при таких обстоятельствах, однако его свойство Cancel аргумента по умолчанию имеет значение true. Простое решение - обработать это событие и установить e.Cancel = false. Реализуйте любую логику в обработчике, который вы считаете необходимым.

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if (e.CloseReason == CloseReason.UserClosing) e.Cancel = false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...