1

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

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未设置,它会调用类似的方法。

4

1 回答 1

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事件处理程序方法中放置的任何内容),您可以定义一个名为类似的表单类级别方法CancelForm,然后调用它。例如:

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);
}

再说一次,我质疑你想要这样做的动机。如果你想支持取消,为什么不添加一个取消按钮呢?为什么用户需要记住键盘命令?键盘命令非常适合想要使用它们的用户,但 GUI 如此受欢迎是有原因的。如果用户应该能够取消操作,给他们一个大的取消按钮让他们点击。请务必在无法取消时禁用它,以提供即时视觉反馈。

作为奖励,当您将Form.CancelButton属性设置为表单上的取消按钮时,该Esc键会自动调用取消按钮,从而使您免于覆盖ProcessCmdKey. 您似乎正在尝试向后解决问题。当您遵循标准习语时,WinForms 会自动为您处理所有这些。遵循标准习语有一些非常好的理由。

于 2013-03-10T11:29:01.613 回答