有没有办法在不添加取消按钮的情况下取消对表单的编辑?
当我没有取消按钮时,我正在寻找一种调用 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 会自动为您处理所有这些。遵循标准习语有一些非常好的理由。