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
正好我不长时间前找到了这个问题的答案,告诉你吧! dim MyForm As Form dim str as string str="form1" set myform=forms.add(str) myform.show
正好我不长时间前找到了这个问题的答案,告诉你吧! dim MyForm As Form dim str as string str="form1" set myform=forms.add(str) myform.show
楼上的应该不行 我认为这比较麻烦,只能挨着个比较返回引用 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
我认为 wts(天胜) 的方法比较好,但还可以简化: 因为窗口是存在的,所以不用再生成一个另外的form dim i as integerforms.add(str) i=forms.count-1 forms(i).show因为最后加入,index总是最大的!用比较的方法不行,因为未显示,forms集合中还不存在!下面散分!
虽然窗体没有显示,但是工程已经存在该窗体了!所有不用去看Index值的
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
改进一下,可以不管大小写: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
一个窗体,你先让它.hide,然后再让它.show ,不要后面的参数,你说它会不会show 呢?
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
dim f as form
for each f in forms
if f.name=formName then
f.visible=true
endif
next
end sub
dim MyForm As Form
dim str as string
str="form1"
set myform=forms.add(str)
myform.show
dim MyForm As Form
dim str as string
str="form1"
set myform=forms.add(str)
myform.show
我认为这比较麻烦,只能挨着个比较返回引用
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
因为窗口是存在的,所以不用再生成一个另外的form
dim i as integerforms.add(str)
i=forms.count-1
forms(i).show因为最后加入,index总是最大的!用比较的方法不行,因为未显示,forms集合中还不存在!下面散分!
你的回答并不贴切
如果用你的方法,每次就会启动一个新的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
dim str as string
str="form1"
for each f in forms
if ucase(f.name) = ucase(str) then f.show
next
看样子你没看懂我的意思,我做了个测试,给你看一下:
'测试的工程需要两个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
我要在程序中打开一个用字符串表示其名称的窗口,如str=“form1”,该怎样做?不要给我说用form1.show啊!因为还未显示,forms集合中没有该窗口!
------------------------------------------
fuxc(Michael) :很感谢你上次给我答复,你的意思我现在明白了。却是是重新创建了一个form 实例。
使用你的方法的前提是窗体必须已经加载了。这时用你的方法确实是正确的,我的方法就错误了。
但是我觉得贴主的意思是窗体还没有加载啊,“因为还未显示,forms集合中没有该窗口!”,这句话是不是这个意思呢?