2008-12-30 120 views
2

我在Borland C++ Builder 5中的对话框上的Escape键处理程序有一个相当复杂的问题。是否有任何其他要求的退出键来取消取消事件(以下列出的除外)?Borland C++ Builder 5 - 取消通过退出键不工作

  1. “Cancel”按钮(TBitBtn)的Cancel属性设置为true。
  2. “取消”按钮的默认属性设置为false。
  3. “取消”按钮将其modalResult设置为mrCancel。

注: 我与至今仍在用Borland C++ Builder的5编制我们有一个单独的项目来替代它的旧的遗留应用程序的工作 - 我只是在做维持生命的尽头。

更新

四个月后,我终于停下抓我的头......事实证明,该应用程序的父窗体有一个运行时OnShortCut处理函数定义。我只需要禁用Esc处理程序来处理子对话框。

+0

检查形式事件处理程序 - OnCloseQuery,onKeyDown和可能的OnKeyPress所有街区。 – 2008-12-30 17:45:34

回答

4

您应该检查所有可能的方式取消事件可能被阻止:

所有的
  1. 首先,检查是否点击取消按钮关闭实际的形式。

  2. 然后检查是否有其他按钮的Cancel属性设置为true。

  3. 之后,检查所有关键事件处理程序,不要忘记窗体的事件处理程序,尤其是如果您启用了KeyPreview。

  4. 如果仍未找到问题,请检查另一个组件是否将其ShortCut属性设置为处理转义键。

  5. 此外,检查是否有任何键盘钩活动。

+0

1.是的,有作品。 2.都能跟得上 3.这种特殊形式没有任何按键事件处理函数定义 感谢指针 – 2009-01-02 02:27:49

+0

注意:如果你定义一个定制的取消按钮返回MrCancel,还必须取消属性设置为true。 – 2011-07-21 21:27:05

1

可能是表单的KeyPreview属性设置为true。 这是Escape键经常/可能已被禁用的地方。 KeyPreview属性也经常启用捕获[返回]按键(即,OnKeyPress)以前进到下一个字段而不是关闭表单。

+0

明天当我回来工作时,我会检查一下。谢谢。 – 2009-01-02 02:28:20

1

您也可以创建另一个对话框,在其中添加取消按钮并查看退出键是否工作。然后比较两种形式的DFM源并检查设置中的差异。

1

是否有一个“CanClose”类型的事件,逻辑阻止它关闭?

1

还要记住,该对话框需要通过ShowModal()而不是Show()调用。例如,如果您的表单被命名为“FAskDialog”,那么显示它的代码应该类似于

FAskDialog-> ShowModal();

而非

FAskDialog->显示();

如果通过Show()调用对话框,那么点击取消键或设置ModalResult = mrCancel将不会导致对话框关闭。

1

这是一个老问题,我可以给答案:

您需要设置的KeyPreview = true,然后编写代码来捕获ESC键:

Form1中::的onkeyup(...)
(Key == 27){
Close();如果(Key == 27){
Close();
}
}