2013-08-19 27 views
-1

我的应用程序是父级子应用程序。子窗体显示然后按cntrl + F4子窗体关闭。如果我按cntrl + F 4如果阻止操作和同一时间,则子窗体提交按钮该事件被调用。Control + F4中的更改操作Vb.net

我该怎么做?

我使用下面的编码是阻止control + 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 

回答

1

此事件已存在,FormClosing事件触发。您可以通过在事件的事件处理程序中设置e.Cancel = True来取消关闭。在做之前一定要检查e.CloseReason。

避免破坏标准的Windows快捷键,没有意义。用户也可以通过点击子窗口的关闭按钮来关闭窗口。 Ctrl + F4只是一个有用的快捷方式,可以在不使用鼠标的情况下执行相同的操作。

0

你必须抓住的形式关闭事件,然后进行测试,如果是通过按键完成的。

我假设你的意思是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 
+0

不,他的意思是Ctrl + F4,这是MDI子窗口的标准快捷键。 –

+0

它让我感到厌烦,我使用当前的键盘状态来决定一个事件。作为反对此的一个论点,我怀疑如果用户在遇到严重性能问题的计算机上击中Ctrl + F4,则该消息可能在表单关闭事件之前排队,导致“My.Computer.Keyboard.CtrlKeyDown”不匹配状态当时用户试图关闭表单。 – Brian