【问题标题】:Keystrokes in Winforms app causing window to close unexpectedlyWinforms 应用程序中的击键导致窗口意外关闭
【发布时间】:2010-04-01 17:59:11
【问题描述】:

我最近遇到了一个奇怪的问题:

每当我在应用程序的任何表单的文本框中输入文本(甚至是单个字符)时,都会导致表单及其父级关闭。到目前为止,我已经检查了以下内容:

  • 可能将击键解释为表单取消的错误/错误分配的事件处理程序
  • 我在多个窗口中使用 keypreview,但调试表明这不是原因
  • 发生在任何形式的应用程序中
  • 即使在表单上放置了全新的文本框也会发生这种情况
  • 尝试从文本框声明中删除 WithEvents 声明 (VB.NET)
  • 当我在 Show 或 ShowDialog 之后中断代码时,结果是 DialogResult.Cancel
  • 表单不使用 AcceptButton 或 CancelButton 属性(设置为无)
  • 注意:我正在修改一个大型代码库,其中包含许多我尚未接触的代码

还有什么可能导致这种奇怪的行为?

【问题讨论】:

  • 只是一个镜头,但我会尝试连接一个 FormClosing 事件并在那里设置一个断点。您可以查看堆栈跟踪以了解您是如何到达那里的。
  • Mike_G:你说对了。将您的评论变成答案,我会支持您。 Slaks 已经打勾了。

标签: c# .net vb.net winforms


【解决方案1】:
  • 按 Ctrl+D、E(调试、异常)并告诉 Visual Studio 在任何抛出异常时中断,然后查看是否有任何异常在起作用。

  • 按 Ctrl+D、N(Debug、New Breakpoint、Break at Function)并在System.Windows.Form.OnClosing 上设置断点,然后查看调用堆栈。 (或者,在主窗体中覆盖OnClosing,然后在其中设置断点)

【讨论】:

  • 是的。在我发布这个问题后,我实际上有同样的想法。打破 Form Closing 处理程序使我能够看到足够的调用堆栈来识别一个计时器,该计时器正在检查应用程序游标的状态并使用 goto 来出错,当游标为空时静默关闭应用程序。我想知道鲁布·戈德堡的这项发明传播了多远。仍然不确定文本更改到底会如何影响消息队列...
【解决方案2】:

按钮的DialogResult被意外设置为“Cancel”,改回默认值“None”后,问题解决了。这就是我的故事。

【讨论】:

    猜你喜欢
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 2020-02-28
    • 1970-01-01
    相关资源
    最近更新 更多