CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  语言基础/算法/系统设计

一个窗体调用另一个窗体无法关闭

楼主rgt27013978(rgt27013978)2004-09-02 16:45:48 在 Delphi / 语言基础/算法/系统设计 提问

三个窗体:  
  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

相关问题

  • 窗体调用
  • 请教 两个或两个以上窗体互相调用(窗体须关闭后也可以调用)
  • 创建窗体无法关闭???
  • 为何在TDataModule 窗体中无法调用Tregsitry.
  • 调用dll中的窗体,把窗体关闭后,为什么调用dll的窗体也不能及时的显示
  • 关闭窗体
  • 关闭窗体
  • dll中的窗体调用
  • 如何调用窗体!
  • VB 窗体调用FORM.HIDE

关键词

  • 执行
  • 数据
  • 解决
  • 窗体
  • 运行
  • bitbtn
  • 关闭
  • formclose
  • tcloseaction
  • tobject

得分解答快速导航

  • 帖主:rgt27013978
  • zzllabc
  • zhengji
  • sundayzhao
  • Jeff20040819
  • qizhanfeng
  • longtusoft
  • BigAngell
  • xinshiji
  • ghy412
  • qizhanfeng
  • zhanglei19820319
  • chijingde
  • zdq801104

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo