Escape键正在关闭Windows窗体表单,没有与之关联的代码或设置

时间:2013-03-15 20:32:12

标签: vb.net winforms

我在Visual Studio 2010中使用VB.NET,面向.NET Framework 3.5。

在我们(​​相当大的)客户端应用程序中,有一个表单(Windows Forms)我们遇到了问题。它与.ShowDialog一起显示(它不是与.ShowDialog一起显示的唯一表单)。表单上有“关闭”和“取消”按钮,Enter键和Escape键分别与这些控件绑定(这也在其他表单上完成)。按钮中的代码执行Hide方法调用以使表单不可见(它实际上在业务流程逻辑中稍后卸载),并且我们再次使用其他表单执行此操作。

单击“关闭”或“取消”按钮可以根据需要使用。按 Enter 键也可以按预期工作(运行关闭单击)。但是当按下Escape键时,首先按预期运行“取消”按钮逻辑,但随后我们收到一个Form Closed事件,表单将被卸载!

其他地方没有代码可以查找Escape键并在表单上执行关闭。我们尝试在Closing事件中设置Cancel参数,但无效 - 表单仍然卸载。我们还将“退出”键与“取消”按钮断开连接,按Escape键然后不运行“取消”代码(如预期的那样),但“表格已关闭”事件仍然会触发。

我无法在测试程序中复制此行为,所以很遗憾,我无法发布一个有效的(非实际的)代码示例。

有关正在发生的事情的任何输入?为什么Escape键关闭表单?

也许最重要的是,我需要做些什么才能进一步调查并找出答案?

1 个答案:

答案 0 :(得分:3)

第一个嫌疑人是表格的CancelButton。同时检查取消按钮的DialogResult

如果您将表单的CancelButton设置为按钮,请按 Esc 键调用按钮的Click事件,将表单的DialogResult设置为{ {1}}并关闭表单。此外,当您将按钮的DialogResult属性设置为Cancel以外的任何其他属性时,单击该按钮将关闭该表单。来自MSDN

  

如果此属性的DialogResult设置为None以外的任何值,并且如果通过ShowDialog方法显示父窗体,则单击该按钮将关闭父窗体,而无需挂接任何事件。

要进一步调查,在窗体上覆盖None方法,在方法上设置断点,当命中断点时,给我们当前的调用堆栈(来自Call Stack窗口)