比如有多个窗体frmA,frmB,frmC,frmD... frmA上面有个Listbox控件,ListBox各项分别是frmB,frmC,frmD的标题,要求单击ListBox某项的时候,便加载对应的窗体,谁有好的方法?
使用 for each frm in forms 只能枚举已经加载的窗体

解决方案 »

  1.   

    什么意思啊?这个:
    Private Sub Label1_Click()
    Dim f As New frm1
    f.Show
    End Sub
      

  2.   

    如果没有load,好像不行的哦。
    只有全部先load,不show,然后取了名称之后再unload。ok了。
    如果已经load的。就hide。
      

  3.   

    //如果没有load,好像不行的哦。
    如果没有load,可以通过forms.add进行添加Private Sub Command2_Click()
        Dim mform As String
        mform = "form3"
        mShowForm mform
    End Sub
    Private Sub mShowForm(ByVal FormName As String)
        Dim mFrm As Object
        For Each mFrm In Forms
            If UCase(mFrm.Name) = UCase(FormName) Then
                mFrm.Show
                Exit Sub
            End If
        Next
       Set mFrm = Forms.Add(FormName)
       mFrm.Show
    End Sub
      

  4.   

    '呵呵,这种帖子我回了N个了,
    '可使用Script Control或使用VBA.dll的EbExecuteLine执行VB脚本,
    '至于使用Script Control来如何完成,在工程中引用Microsoft Script Control就行,这个
    '留个作业让你自己去完成
    '如下仅仅以VBA的EbExecuteLine方法来处理该问题
    Option ExplicitPrivate Declare Function EbExecuteLine Lib "vba6.dll" (ByVal pStringToExec As Long, ByVal Unknownn1 As Long, ByVal Unknownn2 As Long, ByVal fCheckOnly As Long) As LongPublic Function ExecuteLine(sCode As String, Optional fCheckOnly As Boolean) As Boolean
        ExecuteLine = EbExecuteLine(StrPtr(sCode), 0&, 0&, Abs(fCheckOnly)) = 0
    End Function
    Private Sub Form_Load()
        With List1
            .AddItem "frmB"
            .AddItem "frmC"
            .AddItem "frmD"
        End With
    End SubPrivate Sub List1_Click()
        ExecuteLine List1.Text & ".Show vbmodal" '执行相应Form的Show方法显示窗体
    End Sub
      

  5.   

    呵呵,楼上的兄弟,你用EbExecuteLine在vb的ide里玩玩还可以,你试试编译成EXE,程序能执行吗
      

  6.   

    EbExecuteLine只是借用了vba的解释功能,是假象,生成exe后就不行了
    还是用Script吧。
      

  7.   

    汗流如雨~~~~
    楼上两位大虾说得非常有理老实讲我还真没试过EXE,扇自己两耳光先!首先要向所有我提供了同种方法的兄弟们郑重宣布:我实在是太太太对不起你们了,给你们以误导,还靠此招摇撞骗了不少分。希望你们不要以同种方式害人。 :)rainstormmaster(暴风雨 v2.0) 、lsftest()高人呵,你们给了我悔过自新的机会。建议扣我分吧,我认罪
      

  8.   

    不要把窗体类和窗体实例混淆起来,工程列表中的 frmA、frmB、frmC… 是窗体类,而代码 frmA.Show 中的 frmA 是窗体实例,一个类其实可以有多个实例,只是 VB 很友好地允许你使用 frmA 窗体类的同名窗体实例 frmA。工程中窗体类的个数总是固定的,用硬编码罗列就可以了。