窗体调用的问题:被调用窗体执行期间,主调窗体隐藏,等被调窗体Unload之后,主调窗体才能显示并运行?
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




