这是我的问题。
我有一个主应用程序正在运行,并打开了一个模态对话框,此时主应用程序屏幕被禁用,所有焦点都在新的对话框上。
从这个对话框中,我打开另一个模态对话框。所以现在主屏幕和对话框1都被禁用了,而此时对话框2拥有所有的焦点。到目前为止都很完美。
现在当我关闭这个顶层的对话框2时,我希望它只是跳回到对话框1。它会将焦点集中在对话框1上,但是主应用程序现在是可用的,你可以在任何地方点击,这会让对话框1消失但依然保持着打开状态。这对于那1%的用户来说可能会造成问题,因为他们有时不会立即关闭对话框1,而是继续点击其他地方。你可以想象QA(质量保证)不会接受这种情况 ;o)
看起来Windows有点混淆了,因为主应用程序似乎知道它仍然拥有打开的对话框1,因为缀带在功能区上的按钮仍然处于按下状态。
有什么想法吗?
到目前为止,我最好的解决方案是显式设置:
dialog1.PopupMode := pmExplicit;
dialog1.PopupParent := MainFrm;
即使你在主应用程序上单击,这似乎可以让对话框1保持在顶部,当你关闭对话框2时。所以这将鼓励用户尽快关闭它,但不是100%正确的。
编辑:我现在已经创建了一个独立的应用程序,它的功能符合预期。随着窗口的关闭,控件和焦点会从对话框2返回到对话框1,然后当对话框1关闭时回到主应用程序。这表明我们的功能区代码中存在其他问题,但我找不到它。哼!
我有一个主应用程序正在运行,并打开了一个模态对话框,此时主应用程序屏幕被禁用,所有焦点都在新的对话框上。
从这个对话框中,我打开另一个模态对话框。所以现在主屏幕和对话框1都被禁用了,而此时对话框2拥有所有的焦点。到目前为止都很完美。
现在当我关闭这个顶层的对话框2时,我希望它只是跳回到对话框1。它会将焦点集中在对话框1上,但是主应用程序现在是可用的,你可以在任何地方点击,这会让对话框1消失但依然保持着打开状态。这对于那1%的用户来说可能会造成问题,因为他们有时不会立即关闭对话框1,而是继续点击其他地方。你可以想象QA(质量保证)不会接受这种情况 ;o)
看起来Windows有点混淆了,因为主应用程序似乎知道它仍然拥有打开的对话框1,因为缀带在功能区上的按钮仍然处于按下状态。
有什么想法吗?
到目前为止,我最好的解决方案是显式设置:
dialog1.PopupMode := pmExplicit;
dialog1.PopupParent := MainFrm;
即使你在主应用程序上单击,这似乎可以让对话框1保持在顶部,当你关闭对话框2时。所以这将鼓励用户尽快关闭它,但不是100%正确的。
编辑:我现在已经创建了一个独立的应用程序,它的功能符合预期。随着窗口的关闭,控件和焦点会从对话框2返回到对话框1,然后当对话框1关闭时回到主应用程序。这表明我们的功能区代码中存在其他问题,但我找不到它。哼!
Application.ProcessMessages
或其他启动并行消息循环的东西。 - Jens Mühlenhoff