三个窗体:
form1.button1.clickà自动打开FORM2,自动运行完其中一个模块后à自动关闭FORM2à接下来运行form1.button2.click-à自动打开FORM3,运行完其中一个模块后à自动关闭FORM3à接下来运行form1.button3.click。此时的问题主要是到form1.button3.click运行完后,FORM2与FORM3的窗体才关闭,请问问题如在那里?procedure Tform2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
Form1.BitBtn2.Click;
end;procedure Tform3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
Form1.BitBtn3.Click;
end;
form1.button1.clickà自动打开FORM2,自动运行完其中一个模块后à自动关闭FORM2à接下来运行form1.button2.click-à自动打开FORM3,运行完其中一个模块后à自动关闭FORM3à接下来运行form1.button3.click。此时的问题主要是到form1.button3.click运行完后,FORM2与FORM3的窗体才关闭,请问问题如在那里?procedure Tform2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
Form1.BitBtn2.Click;
end;procedure Tform3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
Form1.BitBtn3.Click;
end;
procedure Tform2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Self.Hide;
Form1.BitBtn2.Click;
end;procedure Tform3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Self.Hide;
Form1.BitBtn3.Click;
end;
form1为主窗体
begin
FORM2.ShowModal;
button2.Onclick(Sender);
BitBtn3.Onclick(Sender);
end;procedure TForm1.button2Click(Sender: TObject);
begin
FORM3.ShowModal;
end;
procedure Tform2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
postMessage(form1.handle,MY_Msg,1,0);
end;procedure Tform3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
postMessage(form1.handle,MY_Msg,2,0);
end;
procedure DelMsg(var Msg:TMessage);message MY_Msg;procedure Tform1.DelMsg(var Msg:TMessage);
begin
case Msg.WParam of
1:BitBtn2.Click;
2:BitBtn3.Click
end
这样写当然会是这样的,因为
procedure Tform2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
Form1.BitBtn2.Click;
end;Tform2.FormClose事件中 调用 Form1.BitBtn2.Click;此时close事件并没有执行完成自然不会关闭
这样就行
procedure TForm1.button1Click(Sender: TObject);
begin
if FORM2.ShowModal = mrok then
Form1.BitBtn2.Click;
end;
procedure Form1.BitBtn2Click(Sender: TObject);
begin
if FORM3.ShowModal = mrok then
Form1.BitBtn2.Click;end;
可能是我行表述不清,大家提供的解决办法还不成功。我做的是一个数据下载、数据解压、数据选择和数据导入的程序,缺省状态下是全自动,当然也可以单步运行,单步运行较为简单,现在问题就出在全自动运行上。
我再说一下:
form1为主窗体,按下form1.button1后,自动打开form2,在form2中又有两个button,一个用以执行一段程序,一个用以返回(即结束form2),form2的运行顺序如下:
第一、
procedure TForm2.FormActivate(Sender: TObject);
begin
Button1.Click;
end;
第二、
procedure TForm2.Button1Click(Sender: TObject);
begin
begin
运行一段程序........
end;
Button2.onClick(Sender);
end;第三
procedure TForm2.Button2Click(Sender: TObject);
begin
close;
end;form2窗体从打开到关闭全部自动完成,不需按下form2的任何button(当然这两个button是为分步执行时设的)form3与form2相同。
假如对form2以模式窗体显式,执行完form2的button1时,窗体就停下,必须按下form2的button2,窗体才能关闭,而这不是我想的, 我想要的是这个窗体运行完程序后自动关闭并开始下一步运行。
begin
begin
运行一段程序........
end;
Button2.onClick(Sender);//注意这里,你觉得这个Sender是什么?
end;改成Button2.onClick(Button2);试试
第二个窗体之所以自动关闭是因为第三个窗体的打开,而第三个窗体在全部程序运行完的SHOWMESSAGE后才关闭,就是因为最后的SHOWMESSAGE,第三个窗体才关闭,否则在第三个窗体运行完成后一直到最后的SHOWMESSAGE都会在第一个窗体前出现。
这个问题只能自己慢慢研究了。(想不到VFP极简单的东西,到最DELPHI是这么难。为解决vfp中EVALUATE函数所能实现计算表达式的功能,用了一天才搞定,还只能满足一个条件)见者有分