Dim str As Form
Set str = New Form1
str.Show

解决方案 »

  1.   

    private sub showform(byval formName as string)
    dim f as form
    for each f in forms
    if f.name=formName then
      f.visible=true
    endif
    next
    end sub
      

  2.   

    正好我不长时间前找到了这个问题的答案,告诉你吧!
    dim MyForm As Form
    dim str as string 
    str="form1"
    set myform=forms.add(str)
    myform.show
      

  3.   

    正好我不长时间前找到了这个问题的答案,告诉你吧!
    dim MyForm As Form
    dim str as string 
    str="form1"
    set myform=forms.add(str)
    myform.show
      

  4.   

    楼上的应该不行
    我认为这比较麻烦,只能挨着个比较返回引用
    option explicit
    function getform(byval fName as string)as form
     select case FName
     case "Form1"
      set getform=form1
     case "Form2"
      set getform=form2
     case ...
     ...
     end select 
    end function
      

  5.   

    我认为 wts(天胜) 的方法比较好,但还可以简化:
    因为窗口是存在的,所以不用再生成一个另外的form
    dim i as integerforms.add(str)
    i=forms.count-1
    forms(i).show因为最后加入,index总是最大的!用比较的方法不行,因为未显示,forms集合中还不存在!下面散分!
      

  6.   

    虽然窗体没有显示,但是工程已经存在该窗体了!所有不用去看Index值的
      

  7.   

    wts(天胜):
    你的回答并不贴切
    如果用你的方法,每次就会启动一个新的form1实例,
    而贴主的意思:打开一个隐藏的窗口
    也就是说窗体已经load,但是hide了,用你的方法不会把hide的窗口show出来,只是新开了一个form1而已。正确答案:dim f As form
    dim str as string 
    str="form1"
    for each f in forms
        if f.name = str then f.show
    next
      

  8.   

    改进一下,可以不管大小写:dim f As form
    dim str as string 
    str="form1"
    for each f in forms
        if ucase(f.name) = ucase(str) then f.show
    next
      

  9.   

    一个窗体,你先让它.hide,然后再让它.show ,不要后面的参数,你说它会不会show 呢?
      

  10.   

    To  wts(天胜):
    看样子你没看懂我的意思,我做了个测试,给你看一下:
    '测试的工程需要两个Form:  Form1,Form2
    'Form1上面加3个Button:  Command1,Command2,Command3Option Explicit
    Const str = "form2"Private Sub Command1_Click()
    '你的方法
        Dim MyForm As Form
        Set MyForm = Forms.Add(str)
        MyForm.Show
    End SubPrivate Sub Command2_Click()
    '我的方法
        Dim f As Form
        For Each f In Forms
            If UCase(f.Name) = UCase(str) Then f.Show
        Next
    End SubPrivate Sub Command3_Click()
    '隐藏Form2,用以测试
        Dim i As Integer
        For i = 0 To Forms.Count - 1
            If UCase(Forms(i).Name) = UCase(str) Then
                Forms(i).Hide
                Forms(i).Caption = "Form2" & "-" & i
            End If
        Next
    End Sub
      

  11.   


    我要在程序中打开一个用字符串表示其名称的窗口,如str=“form1”,该怎样做?不要给我说用form1.show啊!因为还未显示,forms集合中没有该窗口!
    ------------------------------------------
    fuxc(Michael) :很感谢你上次给我答复,你的意思我现在明白了。却是是重新创建了一个form 实例。
    使用你的方法的前提是窗体必须已经加载了。这时用你的方法确实是正确的,我的方法就错误了。
    但是我觉得贴主的意思是窗体还没有加载啊,“因为还未显示,forms集合中没有该窗口!”,这句话是不是这个意思呢?
      

  12.   

    sorry!是我没看清楚题目。我光看了标题:打开一个隐藏的窗口,没注意下面的一句话。
      

  13.   

    sorry,未说清楚!我的原义确实是窗体还未加载!我是想要用菜单来打开一系列命名规范的窗口,就可以减少很多过程,以后要修改也只要修改一个地方就行了!谢谢大家!