在主窗体中显示两个次要窗体,然后关闭这两个窗体会导致主窗体失去焦点(另一个应用程序被激活而不是我的)。这些次要窗体可以直接由主窗体创建,也可以通过从第二个窗体创建第三个窗体来创建。在OnClose事件中,次要窗体设置为caFree。使用Delphi 2009(更新3和4)和XP SP3。重现问题的步骤如下:创建新的VCL表单应用程序,将OnClose事件分配如上所述,在创建的表单上拖动按钮,在单击处理程序中创建一个新的TForm1并像下面一样显示它。运行程序。单击按钮以显示第二个窗体。单击第二个窗体上的按钮以创建第三个窗体。关闭这两个新窗体时,主窗体将失去焦点。以下是按钮单击事件处理程序中的代码:with TForm1.Create(Application) do show;有没有办法阻止我的主窗体失去焦点?
有趣的是,当直接从主表单创建两个次要表单时,问题只会在关闭第一个创建的表单后出现,然后关闭第二个创建的表单。
过去我曾经遇到同样的问题,通过更新delphi安装程序解决了这个问题,但在那种情况下,我没有在OnClose事件中使用caFree,这就是这个bug的原因。
一个建议是将次要窗体的Parent属性设置为主窗体,这会使新窗体绑定到主窗体,而我不想要这样。 (并且在那里提出的解决方案始终重新激活主窗体会导致窗体的激活顺序丢失)
PopupMode := pmAuto
,即使MainFormOnTaskBar := false
,焦点问题仍然存在。 - Andreas Rejbrand