我有一个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);
这会导致在该文本框旁边显示错误图像以及工具提示错误消息。
如果我尝试使用窗口顶部的“关闭”按钮关闭应用程序,则此时我无法执行上述操作,因为即使我尝试关闭窗口,上述事件也会不断触发(由于我将注意力从文本框)。
有没有一种方法可以关闭窗口,而无需在表单上创建其他“关闭”按钮?
答案 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;
}