Delphi错误:“无法聚焦禁用或不可见的窗口”

Jam*_*ill 4 delphi delphi-xe2

运行我的已编译程序时出现错误。我已采取一切可能的预防措施来防止错误,例如在隐藏或集中显示表单之前启用表单。该应用程序显示一个DimmerForm(灰色渐变叠加层),然后NewFileForm在叠加层顶部。会NewFileForm执行其工作并确定要制作的文件,并tabsheet在上的页面控件中创建一个新文件,MainForm并显示新创建的标签页。到目前为止,所有这些工作正常(我可以在NewFileForm关闭之前中断,并且发生任何错误,并看到标签页已创建并成功显示)。在NewFileForm随后关闭,这是再正常工作。

如果随后尝试将焦点重新设置为,就会发生错误MainForm。隐藏DimmerForm,或单击MainForm,或将焦点设置为MainForm穿透代码都将导致错误消息的出现。在放置代码{ tryexceptend}不防止错误消息任一。我已经在代码中搜索了所有其他可能由的聚焦触发的方法,MainForm并且在错误发生之前没有输入任何方法(因此不会引起该错误)。

我在以前的应用程序版本中几乎编写了完全相同的代码,然后决定从头开始重新构建所有代码。该应用程序的先前版本在关注表单时毫不费力。

这是打开的代码NewFileForm

procedure TMainForm.NewFilesToolButtonClick(Sender: TObject);
begin

  ShowDimmer;
  NewFileForm.ShowModal;
  HideDimmer;

end;
Run Code Online (Sandbox Code Playgroud)

这是显示调光器形式的代码:

procedure ShowDimmer;
begin

  // Enable to prevent errors
  DimmerForm.Enabled := true;

  // Hide dimmer form and show mainform
  DimmerForm.Show;

end;
Run Code Online (Sandbox Code Playgroud)

这是隐藏调光器形式的代码:

procedure HideDimmer;
begin

  // Enable to prevent errors
  DimmerForm.Enabled := true;
  MainForm.Enabled := true;

  // Hide dimmer form and show mainform
  DimmerForm.Hide;
  MainForm.SetFocus;

end;
Run Code Online (Sandbox Code Playgroud)

小智 5

通常,您将焦点放在尚未创建的对象上(以您正在创建的形式),请尝试将一些onCreate代码移至onShow。没有更多细节,很难说出正在发生什么,但是尝试一下。