按下 Escape 键时关闭 VB.NET 表单

Posted

技术标签:

【中文标题】按下 Escape 键时关闭 VB.NET 表单【英文标题】:Closing a VB.NET form when Escape key is pressed 【发布时间】:2012-11-22 09:06:45 【问题描述】:

我正在使用 VB 2010 Express。

C# 中,我将设置表单CancelButton 属性。

对于这个 VB 表单,我没有 CancelButton,所以我怀疑我需要编程 KeyPressKeyDown

    这两个事件有什么区别? 我应该使用哪个?

    我假设一般代码如下?:

    If e.KeyCode = Keys.Escape Then
        Close()
    End If
    

我在表单的其他控件中有某些.Focus 代码,然后将其放在主表单事件过程中变得毫无意义,因为主表单从未真正拥有焦点。

【问题讨论】:

添加以下代码,记得将表单上的KeyPreview属性设置为TRUE。 Form has a CancelButton property 无论您使用什么语言 - 我不确定“对于这个 VB 表单我没有 CancelButton”是什么意思 @AakashM ...谢谢 - 它一直都在那里!! (教我早上730发帖) @AakashM 我仍然对KeyPressKeyDown 之间的区别感到好奇? 来自MSDN "KeyPress 事件不是由非字符键引发的;但是,非字符键会引发 KeyDown 和 KeyUp 事件。"因此,例如 ASHIFT 之间的不同行为 【参考方案1】:

将你的表单keydown设置为

Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
    If e.KeyCode = Keys.Escape Then Me.Close()
End Sub

然后,记得将表单上的 KeyPreview 属性设置为 TRUE。

【讨论】:

【参考方案2】:

我的解决方案也是在表单属性中:

将 CancelButton 属性设置为执行取消功能的按钮

【讨论】:

【参考方案3】:
    您说“VB 表单没有取消按钮”——所以给它一个不可见的按钮。 a.) 将按钮添加到表单中。 b.) 将其 Visible 属性设置为 False。 (记住,计算机不会犯错误——它们会撒谎。所以让我们来算一算吧。) 在表单属性菜单上,将 CancelButton 属性设置为您的不可见取消按钮。 在表单属性菜单上,将 KeyPreview 属性设置为 True。 双击不可见的 CancelButton 并添加 Me.Dispose() 现在你要处理一个非常糟糕的问题。结构化编程的基本原则之一是“例程必须只有一个出口”。您不想在两个不同的地方处理退出例程。您的用户可以通过使用右上角的“Esc”退出。结构化编程真是太棒了。所以 。 . . 红色按钮右上角的黑色“X”调用 FormName_Deactivate -- 如果您的表单名称是 FormSanta,那么它就是 FormSanta_Deactivate。为了简单起见,不要介意正确的方法,(你的天鹅绒血汗工厂里的微型农奴,你能听到我在哭吗?)给你的右上角“X”按钮和你的隐形退出按钮相同的代码。然后添加 Me.Close()

【讨论】:

【参考方案4】:

必须将表单的“KeyPreview”属性设置为true,否则这将不起作用...

【讨论】:

以上是关于按下 Escape 键时关闭 VB.NET 表单的主要内容,如果未能解决你的问题,请参考以下文章

关闭所有打开的表单,除了一些 VB.Net

e.Handled 在 VB.net 2010 中不起作用

按下返回键时如何通过多个文本字段输入进行选项卡?

没有表单的默认按钮[关闭]

如何通过按 Escape 键重置 QLineEdit 文本?

当按下向下箭头键时,防止 LWUIT 表单的最后一个组件失去焦点