如何通过一个字符串=窗体名找到窗体?

CoolCHEN 2004-08-02 11:46:34
大概意思是这样的:
Dim a As String
a = "form2"
这两句不能变

想通过a这个变量来实现form2.show的效果
...全文
492 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
talent303 2004-08-03
  • 打赏
  • 举报
回复
没有不能用字符串来表示窗体,,,,,

只能定义一个窗体类型变量
Dim a As Form
Private Sub Form_Load()
Set a = Form2
a.Show
End Sub
northwolves 2004-08-03
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
Dim a As String
a = "form2"
Dim myForm As Form
Set myForm = Forms.Add(a)
myForm.Show
End Sub
SafeF8 2004-08-03
  • 打赏
  • 举报
回复
通过字符串好像不行的.
这样吧
Dim a As Form
Private Sub Form_Load()
Set a = Form2
a.Show
End Sub
CoolCHEN 2004-08-03
  • 打赏
  • 举报
回复
星多的达人就是厉害,forms.add解决问题。
-----------------
forms是已加载窗体的集合
落伍者 2004-08-03
  • 打赏
  • 举报
回复
向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.Show
rainstormmaster 2004-08-03
  • 打赏
  • 举报
回复
//但小弟还有个问题是,如果form2在工程中不存在,怎么办?是不是只能通过检测错误号来判断字符变量 a 所代表的窗体是否存在?

是的,只能进行错误处理。

上面LGYAN(紫衣随想)的代码只能处理已经加载的窗体,换而言之,假如有form2这个窗体,但是它没有加载,它是不在forms集合中的
rainstormmaster 2004-08-03
  • 打赏
  • 举报
回复
这样就可以了:

Dim a As String
a = "form2"
dim frm as form
set frm=forms.add(a)
frm.show
LGYAN 2004-08-03
  • 打赏
  • 举报
回复
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.Show
starsoulxp 2004-08-03
  • 打赏
  • 举报
回复
//你提供的代码已经测试通过,但小弟还有个问题是,如果form2在工程中不存在,怎么办?是不是只能通过检测错误号来判断字符变量 a 所代表的窗体是否存在?



---------------------

不存在就不要用set啊
cdbqss1 2004-08-03
  • 打赏
  • 举报
回复
就是://星多的达人就是厉害。

我啥时候才升为五星上将哟
cdbqss1 2004-08-03
  • 打赏
  • 举报
回复
TO: northwolves(狼行天下)
你提供的代码已经测试通过,但小弟还有个问题是,如果form2在工程中不存在,怎么办?是不是只能通过检测错误号来判断字符变量 a 所代表的窗体是否存在?
cdbqss1 2004-08-03
  • 打赏
  • 举报
回复
TO: SafeF8(^_^) 和 talent303(风筝)
问题在于Set a = Form2 一句。
既然我用a="Form2"来表示,那么表明:
一:字符变量a 可以表示Form2,也可以表示Form1、Form4...等等;
二:在给变量a 赋值之前,并不能确定代表哪一个窗体;
所以怎么处理 Set a = ...呢?
cdbqss1 2004-08-02
  • 打赏
  • 举报
回复
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
我也刚好想问这个问题。其实这个功能在vfp中通过宏替换 & 来实现的,可是在vb中不行。
如:在vfp中,用以下语句
a = "form2"
do form &a
就可以打开form2这个表单(窗口)

但在vb中
Dim a As String
a = "form2"
a.show
就要出错了。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧