如何通过一个字符串=窗体名找到窗体?
大概意思是这样的:
Dim a As String
a = "form2"
这两句不能变
想通过a这个变量来实现form2.show的效果
问题点数:50、回复次数:13Top
1 楼cdbqss1(胖胖)回复于 2004-08-02 23:56:19 得分 0
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
我也刚好想问这个问题。其实这个功能在vfp中通过宏替换 & 来实现的,可是在vb中不行。
如:在vfp中,用以下语句
a = "form2"
do form &a
就可以打开form2这个表单(窗口)
但在vb中
Dim a As String
a = "form2"
a.show
就要出错了。
Top
2 楼SafeF8(A++.NET)回复于 2004-08-03 00:18:24 得分 0
通过字符串好像不行的.
这样吧
Dim a As Form
Private Sub Form_Load()
Set a = Form2
a.Show
End SubTop
3 楼northwolves(狼行天下)回复于 2004-08-03 00:27:25 得分 40
Private Sub Command1_Click()
Dim a As String
a = "form2"
Dim myForm As Form
Set myForm = Forms.Add(a)
myForm.Show
End Sub
Top
4 楼talent303(风筝)回复于 2004-08-03 00:32:33 得分 0
没有不能用字符串来表示窗体,,,,,
只能定义一个窗体类型变量
Dim a As Form
Private Sub Form_Load()
Set a = Form2
a.Show
End SubTop
5 楼cdbqss1(胖胖)回复于 2004-08-03 02:06:54 得分 0
TO: SafeF8(^_^) 和 talent303(风筝)
问题在于Set a = Form2 一句。
既然我用a="Form2"来表示,那么表明:
一:字符变量a 可以表示Form2,也可以表示Form1、Form4...等等;
二:在给变量a 赋值之前,并不能确定代表哪一个窗体;
所以怎么处理 Set a = ...呢?Top
6 楼cdbqss1(胖胖)回复于 2004-08-03 02:15:46 得分 0
TO: northwolves(狼行天下)
你提供的代码已经测试通过,但小弟还有个问题是,如果form2在工程中不存在,怎么办?是不是只能通过检测错误号来判断字符变量 a 所代表的窗体是否存在?Top
7 楼starsoulxp(星魂)回复于 2004-08-03 09:19:26 得分 0
//你提供的代码已经测试通过,但小弟还有个问题是,如果form2在工程中不存在,怎么办?是不是只能通过检测错误号来判断字符变量 a 所代表的窗体是否存在?
---------------------
不存在就不要用set啊Top
8 楼LGYAN(紫衣随想)回复于 2004-08-03 09:32:59 得分 0
Dim a As String
a = "form2"
Dim retfrm As Form
Dim frm As Form
For Each frm In Forms
If frm.Name = a Then
Set retfrm = frm
Exit For
End If
Next
If Not (retfrm Is Nothing) Then retfrm.ShowTop
9 楼rainstormmaster(暴风雨 v2.0)回复于 2004-08-03 09:41:41 得分 10
这样就可以了:
Dim a As String
a = "form2"
dim frm as form
set frm=forms.add(a)
frm.showTop
10 楼rainstormmaster(暴风雨 v2.0)回复于 2004-08-03 09:45:51 得分 0
//但小弟还有个问题是,如果form2在工程中不存在,怎么办?是不是只能通过检测错误号来判断字符变量 a 所代表的窗体是否存在?
是的,只能进行错误处理。
上面LGYAN(紫衣随想)的代码只能处理已经加载的窗体,换而言之,假如有form2这个窗体,但是它没有加载,它是不在forms集合中的Top
11 楼ljc_zy(彷徨)回复于 2004-08-03 10:12:11 得分 0
向rainstormmaster(暴风雨 v2.0)学习
综合一下吧,
function CallForm(byval FormName as string)
On error goto ErrHandle
dim Frm as form
set frm=forms.add(formname)
frm.show
exit function
ErrHandle:
if err.number=404 then
debug.print "无该对象
err.clear
end if
end function
或者用CallByName
Dim frm As Form
Set frm = CallByName(Forms, "add", VbMethod, FormName)
frm.ShowTop
12 楼CoolCHEN(☆晓风☆)回复于 2004-08-03 10:18:11 得分 0
星多的达人就是厉害,forms.add解决问题。
-----------------
forms是已加载窗体的集合Top
13 楼cdbqss1(胖胖)回复于 2004-08-03 16:55:46 得分 0
就是://星多的达人就是厉害。
我啥时候才升为五星上将哟Top




