运行我编译的程序时出错了。我已经采取了一切我能想到的预防措施来防止错误,例如在隐藏或聚焦之前启用表单。该应用程序在叠加层顶部显示DimmerForm
(灰色渐变叠加),然后显示NewFileForm
。 NewFileForm
执行其操作并确定要创建的文件,并在tabsheet
的页面控件中创建新的MainForm
,并显示新创建的选项卡表。所有这些工作到目前为止(我可以在NewFileForm
关闭之前中断,并且发生任何错误并看到标签页已经创建并成功显示)。然后NewFileForm
关闭,再次正常工作。
当任何事情尝试将焦点设置回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 :(得分:5)
通常,您将焦点调用到尚未创建的内容(在您正在创建的表单上),尝试将一些onCreate代码移动到onShow。有了更多的细节,很难说出发生了什么,但试试这个。
答案 1 :(得分:0)
有时此错误是由于Post事件期间数据库组件的某种活动引起的... 如果您尝试其他方法,可以尝试以下快速解决方案:将连接到数据集的数据源设置为NIL,然后在完成Post事件后将其重新设置。
类似这样的东西:
Try
Datasource1.DataSet := NIL;
Try
Query1.Post;
Except
On E: Exception Do
Begin
ShowMessage('Post error!' + #13#10 + #13#10 + E.Message);
Exit;
End;
End;
Finally
Datasource1.DataSet := Query1;
End;
答案 2 :(得分:-1)
由Arioch 'The发表的评论中给出的解决方案
您还可以启用“使用调试DCU” [...]