更改控件中的操作+;F4 Vb.net

更改控件中的操作+;F4 Vb.net,vb.net,mdichild,Vb.net,Mdichild,我的应用程序是父、子应用程序。子窗体显示,然后按cntrl+F4关闭子窗体。如何阻止该操作,同时如果我按下cntrl+F4子窗体的have submit按钮,则会调用该事件 我该怎么做 我在下面使用的编码是块控件+F4 Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean If keyData = Keys.Control Or Keys

我的应用程序是父、子应用程序。子窗体显示,然后按
cntrl+F4
关闭子窗体。如何阻止该操作,同时如果我按下
cntrl+F
4子窗体的have submit按钮,则会调用该事件

我该怎么做

我在下面使用的编码是块
控件+F4

Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
        If keyData = Keys.Control Or Keys.F4 Then Return True
        Return MyBase.ProcessCmdKey(msg, keyData)
    End Function

您必须捕获表单关闭事件,然后测试它是否通过按键完成

我猜你是指ALT-F4

    Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
          If My.Computer.Keyboard.AltKeyDown Then e.Cancel = True
    End Sub
甚至更短

    e.Cancel=My.Computer.Keyboard.AltKeyDown

此事件已存在,FormClosing事件激发。您可以通过在事件的事件处理程序中设置e.cancel=True来取消关闭。在进行此操作之前,请务必检查e.CloseReason


不要破坏标准的Windows快捷键,这没有意义。用户还可以通过单击子窗口的关闭按钮来关闭窗口。Ctrl+F4只是一个有用的快捷键,可以不用鼠标来做同样的事情。

不,他的意思是Ctrl+F4,MDI子窗口的标准快捷键。使用当前的键盘状态来决定事件让我感到厌烦。作为反对这一点的一个论点,我怀疑如果用户在遇到严重性能问题的计算机上按Ctrl+F4,则消息可能在表单关闭事件之前排队,从而导致
My.Computer.Keyboard.CtrlKeyDown
与用户尝试关闭表单时的状态不匹配。