按Escape键时关闭VB.NET窗体

按Escape键时关闭VB.NET窗体,vb.net,visual-studio-express,Vb.net,Visual Studio Express,我正在使用VB 2010 Express 在C#中,我将设置表单CancelButton属性 对于这个VB表单,我没有取消按钮,因此我怀疑我需要编写KeyPress或KeyDown 这两件事有什么不同 我应该用哪一种 我假设这方面的一般代码如下所示: If e.KeyCode = Keys.Escape Then Close() End If 我在表单的其他控件中有某些。Focus代码,然后将其放入主表单事件过程中变得毫无意义,因为主表单从来没有真正的焦点。将表单键设置为 Priva

我正在使用VB 2010 Express

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

对于这个VB表单,我没有取消按钮,因此我怀疑我需要编写
KeyPress
KeyDown

  • 这两件事有什么不同
  • 我应该用哪一种
  • 我假设这方面的一般代码如下所示:

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

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

    将表单键设置为

    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。

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

  • 你说“VB窗体没有取消按钮”——所以给它一个不可见的按钮。 a、 )将按钮添加到表单中。 b、 )将其可见属性设置为。(记住,计算机不会犯错——它们是谎言。所以让我们扯平。)
  • 在表单属性菜单上,将取消按钮属性设置为您的不可见取消按钮
  • 在表单属性菜单上,将键预览属性设置为
  • 双击不可见的取消按钮并添加Me.Dispose()
  • 现在你有一个小小的麻烦要处理。结构化编程的基本原则之一是“一个例程必须只有一个出口”。您不希望在两个不同的位置处理出口例程。您的用户可以使用右上角的“Esc”退出。结构化编程真见鬼。所以
  • 右上角红色按钮上的黑色“X”调用FormName_Deactivate——如果表单的名称是FormSanta,则它是FormSanta_Deactivate。为了简单起见,不要介意正确的方法,(你的丝绒汗水店的微型农奴,你能听到我哭吗?)给你右上角的“X”按钮和你的隐形退出按钮相同的代码。然后加上我。Close()

  • 我的解决方案的格式还包括属性:

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

    添加下面的代码,记住将表单上的KeyPreview属性设置为TRUE。属性无论您使用何种语言-我不确定您所说的“对于这个VB表单,我没有取消按钮”是什么意思@AakashM…谢谢-它一直都在那里!!(早上7点30分教我发帖)@AakashM我仍然对
    KeyPress
    KeyDown
    之间的区别感到好奇,因为“KeyPress事件不是由非字符键引发的;但是,非字符键确实会引发KeyDown和keydup事件。”,不同的行为,例如
    A
    SHIFT