CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  控件

窗体调用的问题:被调用窗体执行期间,主调窗体隐藏,等被调窗体Unload之后,主调窗体才能显示并运行?

楼主woshihuzi(我是胡子)2006-03-03 23:04:10 在 VB / 控件 提问

FormA调用FormB,要求FormB执行期间FormA隐藏,FormB执行完毕FormA才能显示并继续执行?  
  请高手指导。  
  谢谢! 问题点数:20、回复次数:13Top

1 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-04 00:35:31 得分 5

FormA调用FormB,要求FormB执行期间FormA隐藏,FormB执行完毕FormA才能显示并继续执行?  
  -------------------------------------------------------------------------------  
  让FormB显示为模式窗体,它可以阻止FormA的程序继续执行,不过它不能阻止Timer控件的事件执行,具体可以这样做:  
   
  FormA:  
  Private   Sub   Command1_Click()  
          Me.Visible   =   False     '让FormA不可见  
          FormB.Show     vbModal     '让FormB以模式窗口显示  
          Me.Visible   =   True       '关闭FormB后,恢复FormA的可示状态  
  End   Sub  
   
  如果FormA里有Timer控件,要想让他们暂停工作,必须用代码来控制,因为模式窗口并不能阻止Timer控件的运行,如:  
   
  Private   Sub   Command1_Click()  
          Timer1.Enabled   =   False   '暂停Timer  
          Me.Visible   =   False     '让FormA不可见  
          FormB.Show   vbModal       '让FormB以模式窗口显示  
          Me.Visible   =   True       '关闭FormB后,恢复FormA的可示状态  
          Timer1.Enabled   =   True     '恢复Timer  
  End   Sub  
   
   
  Top

2 楼woshihuzi(我是胡子)回复于 2006-03-04 14:07:15 得分 0

谢谢。在上面代码的基础上,如果我要求FormB每调用一次,都要执行一次FormB_Load过程,那该如何修改上述代码?  
  Top

3 楼fj182(阿花)回复于 2006-03-04 16:15:04 得分 3

不推荐使用窗体模态的方法来处理此类问题,你可以通过事件来使两个窗口通信。  
  在FormB中定义事件,FormB执行完后引发这个事件,比如用户按了确定按钮什么的。  
  在FormA中来处理这个事件,例如  
   
  在FormA中  
  Private   WithEvents   frmB       As   FormB  
   
  '打开FormB  
  Private   Sub   Command1_Click()  
        If   frmB   Is   Nothing   Then   Set   frmB=New   FormB  
        Me.Hide  
        frmB.Show  
  End   Sub  
   
  '处理FormB中的事件  
  Private   Sub   frmB_OnOK()  
        '...  
        Unload   frmB  
        Me.Show  
  End   Sub  
   
  在FormB中  
   
  Public   Event   OnOK()  
   
  Private   Sub   Command1_Click()  
          RaiseEvent   OnOK()  
  End   Sub  
  Top

4 楼woshihuzi(我是胡子)回复于 2006-03-04 16:19:10 得分 0

我是初学者,技术优劣现在可能无暇顾及了,等对VB有一个初步的认识,再深入研究一点高级的东东。  
  不知道两位提出的办法当中,那种方法更容易初学者掌握。  
  Top

5 楼faysky2(出来混,迟早是要还嘀)回复于 2006-03-04 16:25:11 得分 2

谢谢。在上面代码的基础上,如果我要求FormB每调用一次,都要执行一次FormB_Load过程,那该如何修改上述代码?  
  ------------------------------------------  
  在每次调用FormB的时候,它会自动调用Load事件的Top

6 楼woshihuzi(我是胡子)回复于 2006-03-05 22:15:19 得分 0

现在又遇到一个问题:  
   
  FormA当中点击一个按钮,想调出FormB来执行,代码如下:  
          Me.Hide  
          FormB.Show   vbModal  
          Me.Show  
   
  另外,FormB的Load事件响应函数如下:  
  Private   Sub   Form_Load()  
          '   窗口的位置  
          Me.Left   =   (Screen.Width   -   Me.Width)   /   2  
          Me.Top   =   (Screen.Height   -   Me.Height)   /   2  
          '   代码:读文件初始化一个列表框  
          If   初始化不成功   Then  
                  Unload   Me  
          End   If  
  End   Sub  
   
  每当初始化FormB的列表框失败的时候,就会在Form_Load()里头调用  
  Unload   Me  
  每次运行到这里,就会出错,错误信息如下:  
  Run-time   error   '364':  
  Object   was   unloaded  
   
  这种现象该怎么解决呢?  
  Top

7 楼woshihuzi(我是胡子)回复于 2006-03-06 09:41:55 得分 0

顶一下,我归纳了问题的实质,就是在form_load里面不能unload   me,如果确实需要这样做,该怎么办呢?Top

8 楼enix(猫猫)回复于 2006-03-06 11:04:06 得分 2

怎么会呢?  
  当   Form1   关闭的时候   main   form   显示.当form1   打开的时候,main   form   关闭.  
   
   
  Form1_UnLoad  
    main_form.show  
    me.unload  
  end   sub  
   
  form1_load  
    main_form.visiable=false  
  end   sub  
   
  大致就是这样......  
     
  Top

9 楼woshihuzi(我是胡子)回复于 2006-03-06 19:45:27 得分 0

我设计了四个窗体:  
  FormA   调用   FormB,代码如下:  
          Me.Visible   =   False  
          FormB.Show   vbModal  
          Me.Visible   =   True  
   
  FormB   调用   FormC,代码如下:  
          Me.Visible   =   False  
          FormC.Show   vbModal  
          Me.Visible   =   True  
   
  FormC   调用   FormD,代码如下:  
          Me.Visible   =   False  
          FormD.Show   vbModal  
          Me.Visible   =   True  
   
  最后在窗口D关闭的时候,它不是按照我原先设想的那样:  
  首先现出FormC,关闭FormC才能显示出FormB,关闭FormB才能显示FormA。  
  而是三个窗口一起显示出来:而且FormA在最上面,FormC在最下面。  
   
  我不想让它们一起显示出来,想让它们按照进栈出栈的顺序来显示窗口,该如何办?  
   
  Top

10 楼rainstormmaster(暴风雨 v2.0)回复于 2006-03-06 20:10:25 得分 3

//顶一下,我归纳了问题的实质,就是在form_load里面不能unload   me,如果确实需要这样做,该怎么办呢?  
   
  没办法  
   
  不过,你可以换个事件进行处理:  
  Private   Sub   Form_Activate()  
          '   窗口的位置  
          Me.Left   =   (Screen.Width   -   Me.Width)   /   2  
          Me.Top   =   (Screen.Height   -   Me.Height)   /   2  
          '   代码:读文件初始化一个列表框  
          If   初始化不成功   Then  
                  Unload   Me  
          End   If  
  End   Sub  
  Top

11 楼woshihuzi(我是胡子)回复于 2006-03-06 20:11:54 得分 0

谢谢暴风雨老兄,我刚刚碰到的窗体依次调用的问题,能否指点一下?Top

12 楼rainstormmaster(暴风雨 v2.0)回复于 2006-03-06 20:49:18 得分 5

窗体A:  
   
  Private   Sub   Command1_Click()  
          Me.Visible   =   False  
          FormB.Show  
  End   Sub  
   
  窗体B:  
  Private   Sub   Command1_Click()  
          Me.Visible   =   False  
          FormC.Show  
  End   Sub  
   
   
  Private   Sub   Form_Unload(Cancel   As   Integer)  
          FormA.Visible   =   True  
  End   Sub  
   
  窗体C:  
  Private   Sub   Command1_Click()  
          Me.Visible   =   False  
          FormD.Show  
  End   Sub  
   
  Private   Sub   Form_Unload(Cancel   As   Integer)  
          FormB.Visible   =   True  
  End   Sub  
   
  窗体D:  
  Private   Sub   Form_Unload(Cancel   As   Integer)  
          FormC.Visible   =   True  
  End   SubTop

13 楼yedl830128(回我好吗?)回复于 2006-05-15 21:21:31 得分 0

赶紧顶Top

相关问题

  • 窗体调用
  • dll中的窗体调用
  • 如何调用窗体!
  • VB 窗体调用FORM.HIDE
  • 窗体的调用问题
  • .net 窗体调用问题?
  • 关于窗体的调用
  • 关于窗体间调用
  • 窗体调用问题
  • 不同窗体的调用

关键词

  • 执行
  • 代码
  • me
  • 控件
  • formb
  • 窗体
  • forma
  • 调用
  • formc
  • unload

得分解答快速导航

  • 帖主:woshihuzi
  • faysky2
  • fj182
  • faysky2
  • enix
  • rainstormmaster
  • rainstormmaster

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

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