【问题标题】:How to set CausesValidation to false to Close[X]box of windowsform?如何将 CausesValidation 设置为 false 以关闭 Windows 窗体的 [A] 框?
【发布时间】:2013-05-13 12:59:23
【问题描述】:

我已经在取消按钮上将 Causesvalidation 设置为 false,并且它可以正常工作。

bool IsCancelBtnClicked = false;
private void EmployeeIDtextBox_Validating(object sender, CancelEventArgs e)
{
    if (EmployeeIDtextBox.Text == "")
    {
        MessageBox.Show("Please Enter EmployeeID.", "Invalid EmployeeID");
    }
}

private void button3_Click(object sender, EventArgs e)
{
    IsCancelBtnClicked = true;
    EmployeeIDtextBox.Validating -= new CancelEventHandler(textBox4_Validating);
    this.Close();
}

private void button3_Click(object sender, EventArgs e)
{
     AutoValidate = AutoValidate.Disable;
     Close();
}

我需要在 windowsform 的 Close[X]box 中将 CauseValidation 设置为 false?。 我已经尝试在表单本身中将 CauseValidation 设置为 false,但它不起作用。每次我点击 Close[X]box 时,消息框仍然会出现。

【问题讨论】:

  • 使用FormClosing 事件。如果你在那里做,你可能甚至不需要在button3Click 事件中做。
  • @Corak 我将如何使用 FormClosing 事件?

标签: c# validation


【解决方案1】:

Form 类在关闭表单之前自动运行 ValidateChildren。如果您有任何控件在其 Validating 事件处理程序中设置了 e.Cancel = true ,那么这会阻止关闭按钮工作。您所要做的就是无论如何都允许表单关闭。将此代码粘贴到表单的源代码中:

    protected override void OnFormClosing(FormClosingEventArgs e) {
        e.Cancel = false;
        base.OnFormClosing(e);
    }

如果你抱怨 MessageBox.Show() 而不是 ErrorProvider 并且 你用 Show() 而不是 ShowDialog() 显示窗口,那么你需要一个更大的武器。这需要在 Winforms 运行 ValidateChildren() 方法并触发您的消息框之前尽早禁用验证。将此代码粘贴到表单类中:

    protected override void WndProc(ref Message m) {
        const int WM_CLOSE = 0x10;
        if (m.Msg == WM_CLOSE) {
           base.AutoValidate = System.Windows.Forms.AutoValidate.Disable;
        }
        base.WndProc(ref m);
    }

【讨论】:

  • 谢谢,但消息框仍然出现。 :(
  • 对,ValidateChildren() 就是这样做的。这是一个很好的理由,永远不要使用消息框向用户发送垃圾邮件,而是使用温和的 ErrorProvider。
  • 所以不能用 Close[X]box 做到这一点?我想我必须将 ControlBox 设置为 false 。谢谢你:)
【解决方案2】:

检查表单是否被释放。

if (this.IsDisposed)
{
    if (EmployeeIDtextBox.Text == "")
    {
        MessageBox.Show("Please Enter EmployeeID.", "Invalid EmployeeID");
    }
}

【讨论】:

  • 我在哪里检查表单是否已处理?
猜你喜欢
  • 1970-01-01
  • 2013-04-23
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
  • 2015-01-07
  • 1970-01-01
  • 2011-01-02
相关资源
最近更新 更多