显示验证消息时,使用“关闭窗口”按钮关闭Windows窗体

时间:2018-11-08 15:10:33

标签: winforms

我有一个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 :(得分:2)

根据您的描述,您希望保留默认的自动验证行为,但允许使用标题栏关闭按钮关闭表单。我注意到在这种情况下会引发Form.Closing事件,但是其参数Cancel属性已预设为true。一个简单的解决方案是处理此事件并设置e.Cancel = false。在处理程序中实施您认为必要的任何逻辑。

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if (e.CloseReason == CloseReason.UserClosing) e.Cancel = false;
}