一个窗体调用另一个窗体无法关闭
三个窗体:
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;
问题点数:100、回复次数:20Top
1 楼zzllabc(抱朴子--清心释累,绝率忘情)回复于 2004-09-02 16:53:44 得分 15
三个窗体的关系是怎么样的,谁是主窗体?
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;Top
2 楼rgt27013978(rgt27013978)回复于 2004-09-02 17:00:25 得分 0
谢谢 zzllabc(抱朴子--清心释累,绝率忘情) 的关注 。
form1为主窗体Top
3 楼zhengji(看雨飞)回复于 2004-09-02 17:08:39 得分 15
不知道楼主的两个窗口是怎么 show 的,要是 ShowModal 的就好办了。
procedure TForm1.button1Click(Sender: TObject);
begin
FORM2.ShowModal;
button2.Onclick(Sender);
BitBtn3.Onclick(Sender);
end;
procedure TForm1.button2Click(Sender: TObject);
begin
FORM3.ShowModal;
end;Top
4 楼sundayzhao(皮皮虾)回复于 2004-09-02 17:40:34 得分 15
利用消息就好处理了。
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
Top
5 楼Jeff20040819(美丽)回复于 2004-09-03 18:08:48 得分 2
学习,接分Top
6 楼qizhanfeng(glacier)回复于 2004-09-03 18:55:41 得分 15
我知道你的意思
这样写当然会是这样的,因为
procedure Tform2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
Form1.BitBtn2.Click;
end;
Tform2.FormClose事件中 调用 Form1.BitBtn2.Click;此时close事件并没有执行完成自然不会关闭
Top
7 楼qizhanfeng(glacier)回复于 2004-09-03 19:03:12 得分 0
如果要达到你的效果
这样就行
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;
Top
8 楼longtusoft(神灯之主)回复于 2004-09-03 20:26:53 得分 2
UPTop
9 楼BigAngell(学而不思则罔 思而不学则殆)回复于 2004-09-03 21:49:20 得分 3
上面几位已经说的得更明确了Top
10 楼xinshiji(自由我有)回复于 2004-09-03 22:33:29 得分 3
三个窗体的关系是怎么样的,谁是主窗体?
Top
11 楼rgt27013978(rgt27013978)回复于 2004-09-04 06:29:23 得分 0
谢谢以上各位的关注。
可能是我行表述不清,大家提供的解决办法还不成功。我做的是一个数据下载、数据解压、数据选择和数据导入的程序,缺省状态下是全自动,当然也可以单步运行,单步运行较为简单,现在问题就出在全自动运行上。
我再说一下:
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,窗体才能关闭,而这不是我想的, 我想要的是这个窗体运行完程序后自动关闭并开始下一步运行。Top
12 楼ghy412(用心良苦)回复于 2004-09-04 08:14:22 得分 3
接分学习!Top
13 楼qizhanfeng(glacier)回复于 2004-09-04 09:42:51 得分 3
学习
希望得到结果Top
14 楼zhanglei19820319(阿磊)回复于 2004-09-05 11:58:50 得分 6
定义一个变量,
可以用中间变量改变。Top
15 楼chijingde(AD)回复于 2004-09-05 12:31:54 得分 15
问题出在Sender上
procedure TForm2.Button1Click(Sender: TObject);
begin
begin
运行一段程序........
end;
Button2.onClick(Sender);//注意这里,你觉得这个Sender是什么?
end;
改成Button2.onClick(Button2);试试Top
16 楼chijingde(AD)回复于 2004-09-05 12:33:03 得分 0
或者改成Button2.ClickTop
17 楼rgt27013978(rgt27013978)回复于 2004-09-06 11:42:25 得分 0
谢谢CHIJINGDE()的关注,改成Button2.Click也不起作用。也不知修改了哪里,form2窗体运行后可自动关闭,但form3运行后仍不能自动关闭,只有到程序全部运行完才关闭。困惑中.....Top
18 楼zdq801104(【☆这个杀手不太冷☆】)回复于 2004-09-06 12:54:09 得分 3
接点分Top
19 楼chijingde(AD)回复于 2004-09-06 13:44:52 得分 0
也不知修改了哪里,//呵呵,应该就是我说的那里阿
form3运行后仍不能自动关闭?//贴代码出来看看Top
20 楼rgt27013978(rgt27013978)回复于 2004-09-08 20:41:07 得分 0
唉,问题还是没有解决:
第二个窗体之所以自动关闭是因为第三个窗体的打开,而第三个窗体在全部程序运行完的SHOWMESSAGE后才关闭,就是因为最后的SHOWMESSAGE,第三个窗体才关闭,否则在第三个窗体运行完成后一直到最后的SHOWMESSAGE都会在第一个窗体前出现。
这个问题只能自己慢慢研究了。(想不到VFP极简单的东西,到最DELPHI是这么难。为解决vfp中EVALUATE函数所能实现计算表达式的功能,用了一天才搞定,还只能满足一个条件)
见者有分Top




