有没有办法在不添加取消按钮的情况下取消对表单的编辑?
我正在寻找一种在没有取消按钮时拨打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
。
答案 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会自动为您完成所有这些操作。遵循标准惯用语有一些很好的理由。