2013-03-06 53 views
2

运行我编译的程序时出现错误。为了防止在隐藏或聚焦之前启用表单等错误,我已采取一切可以预防的措施。该应用程序显示一个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; 
+0

试着改变你的'HideDimmer'到'DimmerForm.Hide; MainForm.Show;'没有别的。我非常确定'MainForm.SetFocus'是个问题,但是你已经发布了三个代码块,所以很难确定。 (代码不好,顺便说一下,两个操纵可见控件的独立程序通常不是一个好主意,但很难告诉你如何做得更好,不过,再次,没有上下文。) – 2013-03-06 03:15:41

+4

我想你的问题是与新创建的无法获得焦点的标签页相关。隔离问题并编写一个可调试的简单可重复测试。 – kludg 2013-03-06 06:09:47

+0

是的,显然你正在试图关注一个残疾或不可见的窗口。错误消息很明显。但是我们可能需要复制才能帮助解决问题。 – 2013-03-06 08:57:11

回答

4

一般来说,你在呼唤重点是尚未创建(你是在创造的过程中,表单上),请尝试将部分的onCreate代码来昂秀的东西。有了更多的细节,很难说出发生了什么,但试试这个。

-4

请遵循按步骤

  1. 按F12
  2. 在对象检查选择形式
  3. 组的左属性设置为0