【问题标题】:Skip validation with controlbox[X] of winform? [duplicate]用winform的controlbox[X]跳过验证? [复制]
【发布时间】:2013-05-08 18:35:50
【问题描述】:

我有一个验证事件

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

并且能够使用取消按钮跳过验证

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

是否可以使用 windowsform 的 controlbox[X] 跳过验证?我试图将表单的 CausesValidation 设置为 false,但它不起作用。我也尝试过关闭表单,但它不起作用。

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
   if (EmployeeIDtextBox.CausesValidation)
   {
      EmployeeIDtextBox.CausesValidation = false;
      Close();
   }
}

【问题讨论】:

  • 在 FormClosing 中使用与 cancelbutton_Click 中相同的代码。
  • 我已经试过了,但是没有用:(

标签: c# winforms validation events controlbox


【解决方案1】:

我已经在上一个问题中给了你答案。停止使用 MessageBox,您的问题就会消失。请改用 ErrorProvider 组件。

拦截表单的关闭处理,以便您可以在第一个事件触发之前取消验证,这需要 hack。将此代码粘贴到您的表单中:

    protected override void WndProc(ref Message m) {
        // Intercept WM_SYSCOMMAND, SC_CLOSE
        if (m.Msg == 0x112 && (m.WParam.ToInt32() & 0xfff0) == 0xf060) this.AutoValidate = AutoValidate.Disable;
        base.WndProc(ref m);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-30
    • 2011-04-25
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 2013-01-11
    相关资源
    最近更新 更多