我有一个小窗体,当我在Windows窗体应用程序中按下按钮时,它会出现。我希望能够通过按escape键来关闭窗体。我该怎么做呢?我不确定要使用的事件。form_closing?
weylhg0b1#
如果窗体上已经有一个关闭窗体的按钮,则可以设置窗体上的属性来执行此操作。将窗体的CancelButton属性设置为该按钮。获取或设置用户按Esc键时单击的按钮控件。如果你没有取消按钮,那么你需要添加一个KeyDown处理程序,并检查其中的Esc键:
CancelButton
KeyDown
private void Form_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Escape) { this.Close(); } }
您还必须将KeyPreview属性设置为true。获取或设置一个值,该值指示窗体是否将在键事件传递给具有焦点的控件之前接收该事件。然而,正如Gargo在他的answer中指出的,这意味着按Esc键中止对对话框中控件的编辑也会有关闭对话框的效果。为了避免这种情况,请重写ProcessDialogKey方法,如下所示:
KeyPreview
ProcessDialogKey
protected override bool ProcessDialogKey(Keys keyData) { if (Form.ModifierKeys == Keys.None && keyData == Keys.Escape) { this.Close(); return true; } return base.ProcessDialogKey(keyData); }
5ktev3wc2#
我发现最好的方法是重写“ProcessDialogKey”函数。这种方法取消打开的控件仍然是可能的,因为只有当没有其他控件使用按下的键时才会调用该函数。这与设置CancelButton属性的行为相同。使用KeyDown事件总是会触发,因此即使窗体应该取消对打开的编辑器的编辑,窗体也会关闭。
vwhgwdsa3#
如果窗体上有“取消”按钮,则可以将Form.CancelButton属性设置为该按钮,然后按Esc键将有效地“单击该按钮”。如果没有这样的按钮,请查看Form.KeyPreview属性。
ki1q1bka4#
Button cancelBTN = new Button(); cancelBTN.Size = new Size(0, 0); cancelBTN.TabStop = false; this.Controls.Add(cancelBTN); this.CancelButton = cancelBTN;
z9gpfhce5#
将此代码粘贴到窗体的“按下键时”属性中,同时确保将“键预览”属性设置为“是”。
If KeyCode = vbKeyEscape Then DoCmd.Close acForm, "YOUR FORM NAME"
nbnkbykc6#
Windows窗体实际上有一个属性,专门用于已经有一个取消按钮,但希望补充Esc键功能的情况。
this.CancelButton = yourButton_button;
该属性如其文档中所述:窗体的“取消”按钮。如果设置了此属性,则每当用户按“ESC”键时,该按钮都会被“单击”。可能值得注意的是,还有this.AcceptButton用于“Enter”键。
this.AcceptButton
6条答案
按热度按时间weylhg0b1#
如果窗体上已经有一个关闭窗体的按钮,则可以设置窗体上的属性来执行此操作。
将窗体的
CancelButton
属性设置为该按钮。获取或设置用户按Esc键时单击的按钮控件。
如果你没有取消按钮,那么你需要添加一个
KeyDown
处理程序,并检查其中的Esc键:您还必须将
KeyPreview
属性设置为true。获取或设置一个值,该值指示窗体是否将在键事件传递给具有焦点的控件之前接收该事件。
然而,正如Gargo在他的answer中指出的,这意味着按Esc键中止对对话框中控件的编辑也会有关闭对话框的效果。为了避免这种情况,请重写
ProcessDialogKey
方法,如下所示:5ktev3wc2#
我发现最好的方法是重写“ProcessDialogKey”函数。这种方法取消打开的控件仍然是可能的,因为只有当没有其他控件使用按下的键时才会调用该函数。
这与设置CancelButton属性的行为相同。使用KeyDown事件总是会触发,因此即使窗体应该取消对打开的编辑器的编辑,窗体也会关闭。
vwhgwdsa3#
如果窗体上有“取消”按钮,则可以将Form.CancelButton属性设置为该按钮,然后按Esc键将有效地“单击该按钮”。
如果没有这样的按钮,请查看Form.KeyPreview属性。
ki1q1bka4#
z9gpfhce5#
将此代码粘贴到窗体的“按下键时”属性中,同时确保将“键预览”属性设置为“是”。
nbnkbykc6#
Windows窗体实际上有一个属性,专门用于已经有一个取消按钮,但希望补充Esc键功能的情况。
该属性如其文档中所述:
窗体的“取消”按钮。如果设置了此属性,则每当用户按“ESC”键时,该按钮都会被“单击”。
可能值得注意的是,还有
this.AcceptButton
用于“Enter”键。