2 回答
TA贡献1810条经验 获得超4个赞
通常,它们在技术上有所不同(按照执行顺序),但是它们会做相同的事情。您不必对此过于谨慎。
我会使用ProcessDialogKey,因为即使像控制TextBox包含焦点,ProcessDialogKey的Form运行,而在这种情况下,KeyDown或KeyUp的Form将只提出如果设置KeyPreview在表格中true。
因此,这是我将使用的代码:
protected override bool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.Escape)
{
this.Close();
return true;
}
return base.ProcessDialogKey(keyData);
}
它是安静的相似到的方式CancelButton工作。
TA贡献1780条经验 获得超4个赞
只是为了扮演魔鬼的拥护者,人们可能会争辩说两者都不适合此功能,因为Form类为此公开了Form.CancelButton属性。
获取或设置用户按下ESC键时单击的按钮控件。
此属性的类型为IButtonControl。因此,Form本身可以实现该接口并用作其自己的接口CancelButton。
public partial class Form1 : Form, IButtonControl
{
public Form1()
{
InitializeComponent();
CancelButton = this;
}
DialogResult IButtonControl.DialogResult
{
get {return DialogResult.OK;}
set {}
}
void IButtonControl.NotifyDefault(bool value) { }
void IButtonControl.PerformClick()
{
this.DialogResult = DialogResult.Cancel;
this.Close();
}
}
当然,如果窗体提供了实际的CancelButton,则应将其分配给Form.CancelButton属性。
- 2 回答
- 0 关注
- 408 浏览
添加回答
举报