运行我编译的程序时出现错误。为了防止在隐藏或聚焦之前启用表单等错误,我已采取一切可以预防的措施。该应用程序显示一个DimmerForm(灰色渐变叠加),然后显示叠加层的NewFileForm ontop。 NewFileForm完成它的工作并确定要创建的文件,并在MainForm的页面控件中创建一个新的标签页并显示新创建的标签页。所有这些工作到目前为止(我可以在NewFileForm关闭之前打破并发生任何错误,并看到选项卡表已成功创建并显示)。 NewFileForm然后关闭,再次正常工作。Delphi错误:“无法关注禁用或隐藏的窗口”
当任何事情都尝试将焦点设置回MainForm时,会发生错误。隐藏DimmerForm,或单击MainForm,或通过代码将焦点设置到MainForm都会导致发生错误消息。将代码放在{try,except,end}中也不会阻止错误消息。我在代码中搜索了可能由MainForm聚焦触发的所有其他方法,并且在错误发生之前没有输入任何方法(因此不能导致它)。
我在之前版本的应用程序中编写了几乎完全相同的代码,然后决定从头开始重构所有代码。该应用程序的以前版本与表单重点工作没有任何关系。
这里是打开NewFileForm的代码;
procedure TMainForm.NewFilesToolButtonClick(Sender: TObject);
begin
ShowDimmer;
NewFileForm.ShowModal;
HideDimmer;
end;
这里是显示调光表格的代码;
procedure ShowDimmer;
begin
// Enable to prevent errors
DimmerForm.Enabled := true;
// Hide dimmer form and show mainform
DimmerForm.Show;
end;
这里是隐藏调光表格的代码;
procedure HideDimmer;
begin
// Enable to prevent errors
DimmerForm.Enabled := true;
MainForm.Enabled := true;
// Hide dimmer form and show mainform
DimmerForm.Hide;
MainForm.SetFocus;
end;
试着改变你的'HideDimmer'到'DimmerForm.Hide; MainForm.Show;'没有别的。我非常确定'MainForm.SetFocus'是个问题,但是你已经发布了三个代码块,所以很难确定。 (代码不好,顺便说一下,两个操纵可见控件的独立程序通常不是一个好主意,但很难告诉你如何做得更好,不过,再次,没有上下文。) – 2013-03-06 03:15:41
我想你的问题是与新创建的无法获得焦点的标签页相关。隔离问题并编写一个可调试的简单可重复测试。 – kludg 2013-03-06 06:09:47
是的,显然你正在试图关注一个残疾或不可见的窗口。错误消息很明显。但是我们可能需要复制才能帮助解决问题。 – 2013-03-06 08:57:11