单击取消按钮时会触发什么事件?

时间:2013-03-10 05:59:45

标签: winforms

有没有办法在不添加取消按钮的情况下取消对表单的编辑?

我正在寻找一种在没有取消按钮时拨打CancelButton.PerformClick()的方法。

在表单代码中,我添加了以下内容 - 但需要知道如何取消编辑。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
  if(keyData == Keys.Escape) {
    // What goes here?
  }
  return base.ProcessCmdKey(ref msg, keyData);
}

表单包含文本控件和BindingNavigator

事实证明,我可以使用

完成我需要的工作
navigator.BindingSource.CancelEdit();
然而,我想知道它有什么方式可以调用类似的东西    如果未设置form.CancelButton.PerformClick(),则form.CancelButton

1 个答案:

答案 0 :(得分:2)

  

有没有办法在不添加取消按钮的情况下取消对表单的编辑?

     

我正在寻找一种在没有取消按钮时调用CancelButton.PerformClick()的方法。

总之,没有。除非您已创建取消按钮,否则没有取消按钮。除非您已为其指定了对象,否则Form.CancelButton属性不会指定任何对象。

但是,可能有办法实现您想要实现的目标。想一想:如果 有取消按钮会发生什么?取消按钮会做什么?

它会关闭表单,丢弃所有用户的更改,对吧?那么为什么不关闭表格呢?类似的东西:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
  if(keyData == Keys.Escape) {
    this.Close();
  }
  return base.ProcessCmdKey(ref msg, keyData);
}

如果您需要在取消时进行更多清理(例如,无论您通常放在取消按钮的Click事件处理程序方法中),您只需定义一个名为{{ {1}},然后调用它。例如:

CancelForm

然后,我再次质疑你想要这样做的动机。如果您想支持取消,为什么不添加取消按钮?为什么用户需要记忆键盘命令?对于想要使用它们的用户来说,键盘命令很好,但是GUI有如此受欢迎的原因。如果用户应该能够取消操作,请给他们一个大的取消按钮,让他们点击。当取消不可用时,请务必禁用它,提供即时视觉反馈。

作为奖励,当您将private void CancelForm() { // do cleanup this.Close(); } protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { if(keyData == Keys.Escape) { this.CancelForm(); } return base.ProcessCmdKey(ref msg, keyData); } 属性设置为表单上的取消按钮时, Esc 键会自动调用取消按钮,使您无法覆盖Form.CancelButton 。你似乎试图向后解决问题。当您遵循标准习语时,WinForms会自动为您完成所有这些操作。遵循标准惯用语有一些很好的理由。