我想将数据从Form2的状态栏(位于可用表单列表中并用于登录目的)传输到MainForm上的状态栏(自动处理的状态栏)。 如果我使用:
procedure TMainForm.FormShow(Sender: TObject);
begin
AdvOfficeStatusBar1.Panels[0].Text := Form2.AdvOfficeStatusBar1.Panels[0].Text;
end;
我收到访问冲突错误。 。为什么会这样?我怎么能克服这个?
答案 0 :(得分:1)
根据您的评论,我会说发生了以下情况:
您将用于登录表单的代码是:
procedure Login;
begin
with TForm2.Create(nil) do
try
Application.MainForm.Hide;
if ShowModal = mrOK then
Application.MainForm.Show
else
Application.Terminate;
finally
Free;
end;
end;
这里发生的是TLoginForm有一个隐含变量。这与自动创建的变量不同,后者位于TForm2单元中Form2: TForm2;
。表单关闭后,将直接释放此变量。
看看我的意思。如果从应用程序中删除名为Form2的变量,则代码中唯一不能编译的部分就是原始帖子中的行。
如果您想要执行此类操作,您需要做的就是这样(我已将TLoginForm的名称更改为您的Form2)。
procedure Login;
begin
Form2 := TForm2.Create(nil);
Application.MainForm.Hide;
if Form2.ShowModal = mrOK then
Application.MainForm.Show
else
begin
Form2.Free;
Application.Terminate;
end;
end;
关闭主表单时,您必须释放Form2。我真的不建议做这种事情。作为一个快速解决方案,您最好将文本AdvOfficeStatusBar1.Panels[0].Text
保存在Form2的OnClose事件中的全局变量中,如下所示:
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
g_MySavedVariable := AdvOfficeStatusBar1.Panels[0].Text;
end;
然后将其加载到主窗体中:
procedure TMainForm.FormShow(Sender: TObject);
begin
AdvOfficeStatusBar1.Panels[0].Text := g_MySavedVariable;
end;
即便这样也不理想,但应该让你开始运作。
如果您正在寻找登录表单的代码,您可以在登录表单和主表单之间传递数据,那么您最好在StackOverflow(delphi Login Form)中查看此问题以及答案大卫和科斯明。我个人倾向于Cosmin的解决方案,因为你不需要弄乱DPR,也不涉及全局变量。