当前位置:编程学习 > VB >>

关于批量隐藏窗体,请高手帮忙,谢谢

目前我程序中使用了很多个窗体。
当点击某图片或按钮想弹出一个窗体,其他窗体全部隐藏。目前是这么做的。
如果有10个窗口则
Private Sub 公司_Click(Index As Integer)
form1.Hide
form2.Hide
Form3.Show
Form4.Hide
Form5.Hide
Form6.Hide
Form7.Hide
Form8.Hide
Form9.Hide
Form10.Hide
End Sub
但这样hide好多要写。
有没有批量隐藏的,非常感谢。 --------------------编程问答-------------------- 设计时将每个窗体的Visible都设置为False,需要显示什么窗体设置其Visible=True即可。 --------------------编程问答-------------------- 我这个是有很多窗体,
假设当前窗体为Form1
这时点击Form1里边的一个按钮,弹出窗体Form2,Form1要隐藏。
有没有这样的命令让其他全部窗体都隐藏,只显示Form2 --------------------编程问答--------------------

Function ShowNamedForm(strForm As String) As Form
        Dim frmTemp     As Form
        Set frmTemp = forms.Add(strForm)
        frmTemp.Show
        Set ShowNamedForm = frmTemp
End Function

Sub ShowNumForm(strForm As String)
Dim J As String
For i = 1 To 10
    J = "form" & i
    If i = strForm Then
    ShowNamedForm (J)
    End If
Next i
Me.Hide
End Sub

调用如下:

Private Sub Command1_Click()
ShowNumForm ("2")
End Sub

要显示哪个窗体就改里面的参数就行了 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 3 楼  的回复:
VB code

Function ShowNamedForm(strForm As String) As Form
        Dim frmTemp     As Form
        Set frmTemp = forms.Add(strForm)
        frmTemp.Show
        Set ShowNamedForm = frmTemp
End Funct……

如果窗体名字不是form1,form2这些还得修改代码...不爽

vb维护了全局集合forms,里面是已经加载的所有窗体.

Private Sub Command1_Click()
Form2.Show
End Sub

Private Sub Command2_Click()
Form3.Show
End Sub

Private Sub Command3_Click()
Dim a As Form
For Each a In Forms
        Debug.Print a.Name
Next
End Sub

直接command3,显示打印了form1
点了command1,点command3,打印了form1,form2..
如果关闭了form2,command3里面就不答应form2了,因为form2卸载了

form2.show和form2.vislble=true是不同的. --------------------编程问答-------------------- Sub ShowNumForm(strForm As String)
断点在这行了,不知道为什么? --------------------编程问答-------------------- 提示编译错误,
语法错误 --------------------编程问答--------------------
引用 5 楼  的回复:
引用 3 楼  的回复:

VB code

Function ShowNamedForm(strForm As String) As Form
Dim frmTemp     As Form
Set frmTemp = forms.Add(strForm)
frmTemp.Show
Set ShowNamedForm = frmTemp
End Funct……

如果窗体……


没看太懂,求详解 --------------------编程问答--------------------
引用 8 楼  的回复:
引用 5 楼  的回复:

引用 3 楼  的回复:

VB code

Function ShowNamedForm(strForm As String) As Form
Dim frmTemp     As Form
Set frmTemp = forms.Add(strForm)
frmTemp.Show
Set ShowNamedForm = frmTemp
End……



Function ShowNamedForm(strForm As String) As Form
        Dim frmTemp     As Form
        Set frmTemp = Forms.Add(strForm) '从forms全局集合里获取指定名字的窗体参考,
        '这个时候窗体还没有显示,集合里没有这个窗体的,自己给集合里么添加了
        '这样才能得到窗体的参考,strForm是个字符串,不是窗体
        '可以在监视forms观察变化
        frmTemp.Show '显示窗体
        Set ShowNamedForm = frmTemp '返回显示的这个窗体的参考.这是个函数...
End Function

Sub ShowNumForm(strForm As String)
Dim j As String, i
'遍历所有窗体,form1-form10,同时也构造了窗体名字
For i = 1 To 10
    j = "Form" & i
    If i = strForm Then '如果遍历到得窗体是想要显示的窗体,
    ShowNamedForm (j) '就去用名字操作这个窗体,j是窗体名字"form" & i
    '这里可以直接退出循环了吧? exit for
    End If
Next i
Me.Hide '新的窗体都显示了,自己该藏起来了
End Sub


'调用如下:
'VB code

Private Sub Command1_Click()
'显示窗体2,名字是默认名字form2,
ShowNumForm ("2")
End Sub

Private Sub Command2_Click()
Form2.Show
End Sub

都是hide...关闭所有窗体不会造成程序退出,因为找不到活动窗体了,..每个窗体都应该在其退出过程里面显示新的窗体,"父"窗体 --------------------编程问答--------------------
引用 9 楼  的回复:
引用 8 楼  的回复:

引用 5 楼  的回复:

引用 3 楼  的回复:

VB code

Function ShowNamedForm(strForm As String) As Form
Dim frmTemp     As Form
Set frmTemp = forms.Add(strForm)
frmTemp.Show
Set ShowNamedFor……

我编译成了
不错
但出了问题:
当i=10000以下数字时,程序很快
但当i=99999999以上时,程序非常慢! --------------------编程问答--------------------
引用 10 楼  的回复:
引用 9 楼  的回复:

引用 8 楼  的回复:

引用 5 楼  的回复:

引用 3 楼  的回复:

VB code

Function ShowNamedForm(strForm As String) As Form
Dim frmTemp     As Form
Set frmTemp = forms.Add(strForm)
frmTemp.Show
……

这么多窗体啊...而且是隐藏,不是卸载...那要多少内存呀,系统没死啊?
哥们你太狠了 --------------------编程问答-------------------- 呵呵,原来如北啊 --------------------编程问答-------------------- 最好别用隐藏的方式,不过为了省事也可以这样写,代码简单些。 --------------------编程问答--------------------
引用 12 楼  的回复:
呵呵,原来如北啊

做个几十窗体就够多的了,还99999999 --------------------编程问答-------------------- --------------------编程问答-------------------- 不错学习了 --------------------编程问答-------------------- 这结贴有够低的 --------------------编程问答-------------------- 用集合嘛.

如果只要某个窗体显示,其它全隐藏,那就在集合里找,没有就LOAD一个窗体,有就VISABLE.

private sub ShowForm(byval sFormName as string)
    dim oForm as form,IsLoad as boolean

    for each tmpform in forms
        if sformname=oform.name then
            oform.visible=true
            isload=true
        else
            oform.visible=false
        end if
    next

    if isload=false then     '未加载的情况下,则LOAD
        set oform=forms.add(sFormName)
        oform.visible=true
    end if
end sub

调用:

call showform("Form77")
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,