知道一个窗体的名字,如果将这个窗体实例化?

hillmanweb 2003-08-18 08:59:48
比如,我有一个已经存在的窗体frm1,还有一个字符串aaa="frm1",我需要在程序中通过这个字符串加载窗体,比如,用户输入frm1,我就可以加载相应名字的窗体,我不想通过if语句或者Select Case语句在程序中进行判断加载,有什么方式可以实现这个要求吗?
...全文
54 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
叶帆 2003-08-19
  • 打赏
  • 举报
回复
在Form_load事件里添加也可
叶帆 2003-08-19
  • 打赏
  • 举报
回复
你可以在模块中定义一个全局 form变量

Private Sub Form_Activate()
set vbform=me
end sub
hillmanweb 2003-08-19
  • 打赏
  • 举报
回复
To:叶帆 or of123()
谢谢你们的帮助,我还有一个问题,可否将这个窗体赋值给一个VB.Form对象,然后像普通窗体一样操作?应该如何实现?
aiur2000 2003-08-19
  • 打赏
  • 举报
回复
记录成a(1)=aaa,b(1)=frml
用户输入aaa,找到相应的i,即1后,使用b(10)即frml
然后frml.show就可以了啊
of123 2003-08-19
  • 打赏
  • 举报
回复
还是叶帆的方法好,简化一下:
Option Explicit
Private Declare Function EbExecuteLine Lib "vba6.dll" (ByVal pStringToExec As Long, ByVal Unknownn1 As Long, ByVal Unknownn2 As Long, ByVal fCheckOnly As Long) As Long

Private Sub Command1_Click()
Call EbExecuteLine(StrPtr(Text1 & ".show"), 0&, 0&, 0&)
End Sub
of123 2003-08-19
  • 打赏
  • 举报
回复
这样可以多次执行:

Option Explicit

Private Sub Command1_Click()
Dim myform As Form
For Each myform In Forms
If myform.Name = Text1 Then myform.Show: Exit For
Next
End Sub

Private Sub Form_Activate() '在Activate中重复加载
Load Form2
End Sub
of123 2003-08-19
  • 打赏
  • 举报
回复
Option Explicit

Private Sub Form_Load()
Load Form2
End Sub

Private Sub Command1_Click()
Dim myform As Form
For Each myform In Forms
If myform.Name = Text1 Then myform.Show: Exit For
Next
End Sub
bJiao 2003-08-19
  • 打赏
  • 举报
回复
YEFANQIU说的可以做到
tonylk 2003-08-19
  • 打赏
  • 举报
回复
自控件的话可以通过Controls.Add(...)的方法追加,可是窗体就不知道了。
叶帆 2003-08-19
  • 打赏
  • 举报
回复
'这个可以,不过要慢一些
Option Explicit
Private Declare Function EbExecuteLine Lib "vba6.dll" (ByVal pStringToExec As Long, ByVal Unknownn1 As Long, ByVal Unknownn2 As Long, ByVal fCheckOnly As Long) As Long

Private Function ExecuteLine(sCode As String, Optional fCheckOnly As Boolean) As Boolean
ExecuteLine = EbExecuteLine(StrPtr(sCode), 0&, 0&, Abs(fCheckOnly)) = 0
End Function

Private Sub Command1_Click()
Dim res As Boolean
dim aaa as string
aaa="frm1"
res = ExecuteLine(aaa & ".show")
End Sub

射天狼 2003-08-19
  • 打赏
  • 举报
回复
CALLBYNAME好像也只是能实现:知道对象的名字,用字符串带替属性或事件.
hillmanweb 2003-08-19
  • 打赏
  • 举报
回复
唉,唉,真的不行啊???
wumy_ld 2003-08-19
  • 打赏
  • 举报
回复
没法做到
onlineboy 2003-08-19
  • 打赏
  • 举报
回复
不行
老老实实Select Case
hillmanweb 2003-08-19
  • 打赏
  • 举报
回复
楼上,估计不行。
继续UP
jornet 2003-08-18
  • 打赏
  • 举报
回复
根据名字得到窗体进程的hwnd,再由此复制一个窗体进程,不知道这样行不行
since1990 2003-08-18
  • 打赏
  • 举报
回复
帮你 up

7,763

社区成员

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

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