4

运行已编译的程序时出现错误。我已经采取了我能想到的所有预防措施来防止出现错误,例如在隐藏或集中它们之前启用表单。该应用程序显示一个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;
4

3 回答 3

6

通常,您将焦点调用到尚未创建的内容(在您正在创建的表单上),尝试将一些 onCreate 代码移动到 onShow。如果没有更多细节,很难说出发生了什么,但试试这个。

于 2013-06-06T13:22:15.623 回答
0

有时此错误是由 Post 事件期间数据库组件的某种活动引起的...如果您尝试了其他任何方法,您可以尝试这个快速解决方案:将连接到 Dataset 的 Datasource 设置为 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;
于 2018-11-20T14:11:38.673 回答
-1

Arioch发表的评论中给出的解决方案

您还可以启用“使用调试 DCU” [...]

于 2018-09-18T11:55:12.243 回答