博尔兰C++;生成器5-通过退出键取消不工作 我在Borland C++ Builder 5的对话框中有一个相当复杂的问题。触发取消事件时,逃生钥匙是否有其他要求(我在下面列出的要求除外) “Cancel”按钮(TBitBtn)的Cancel属性设置为true “取消”按钮的默认属性设置为false “取消”按钮的modalResult设置为mrCancel

博尔兰C++;生成器5-通过退出键取消不工作 我在Borland C++ Builder 5的对话框中有一个相当复杂的问题。触发取消事件时,逃生钥匙是否有其他要求(我在下面列出的要求除外) “Cancel”按钮(TBitBtn)的Cancel属性设置为true “取消”按钮的默认属性设置为false “取消”按钮的modalResult设置为mrCancel,c++,event-handling,c++builder,C++,Event Handling,C++builder,注: 我正在处理一个旧的遗留应用程序,它仍然在Borland C++ Builder 5中编译。我们有一个单独的项目来取代它-我只是在做寿命结束的维护 更新 四个月后,我终于不再挠头了……原来应用程序的父窗体定义了一个运行时OnShortCut处理程序。我只需要禁用它,Esc处理程序才能在子对话框上工作。您应该检查所有可能阻止取消事件的方法: 首先,检查单击“取消”按钮是否实际关闭表单 然后检查是否有其他按钮的Cancel属性设置为true 在检查完所有键事件处理程序之后,不要忘记表单的事件处理

注: 我正在处理一个旧的遗留应用程序,它仍然在Borland C++ Builder 5中编译。我们有一个单独的项目来取代它-我只是在做寿命结束的维护

更新


四个月后,我终于不再挠头了……原来应用程序的父窗体定义了一个运行时OnShortCut处理程序。我只需要禁用它,Esc处理程序才能在子对话框上工作。

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

  • 首先,检查单击“取消”按钮是否实际关闭表单

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

  • 在检查完所有键事件处理程序之后,不要忘记表单的事件处理程序,尤其是在启用了KeyPreview的情况下

  • 如果仍然没有找到问题,请检查其他组件是否设置了快捷方式属性来处理转义键

  • 还要检查是否有任何键盘挂钩处于活动状态


  • 可能是表单的KeyPreview属性已设置为true。 这是退出钥匙经常/可能被禁用的地方。
    KeyPreview属性通常还可以捕获[Return]按键(即OnKeyPress)以前进到下一个字段,而不是关闭表单。

    您还可以创建另一个对话框,在其中添加取消按钮,并查看转义键是否有效。然后比较两种表单的DFM源并检查设置的差异。

    是否存在逻辑阻止其关闭的“CanClose”类型事件?

    还请记住,该对话框需要通过ShowModal()调用,而不仅仅是Show()。例如,如果表单名为“FAskDialog”,则显示该表单的代码应如下所示

    FAskDialog->ShowModal()

    而不是

    FAskDialog->Show()


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

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

    您需要设置KeyPreview=True,然后编写代码以捕获ESC键:

    表单1::OnKeyUp(…)
    {
    如果(键==27){
    Close();
    }

    }

    检查表单事件处理程序——OnCloseQuery、OnKeyDown和OnKeyPress都可以阻止此操作。1。是的,很有效。2.不是3。此特定表单未定义关键事件处理程序,感谢指针注意:如果定义自定义取消按钮以返回MrCancel,则还必须将Cancel属性设置为true。选中此选项-很遗憾,正在使用ShowModal。谢谢你。