VB中LOAD控件的方法?

zincoh 2002-06-11 02:42:16
在设计窗体的时候不往窗体上放控件,例如一个TEXTBOX
在程序中动态加载一个TEXTBOX应该如何实现?
...全文
754 点赞 收藏 5
写回复
5 条回复
胡楮智 2002年06月11日
两个方法:
1.放上一个实现多个的方法:
例如先放上一个控件text1,并令index=0
则创建新的text时,可以这样:

load text1(1)
text1(1).visible=true
......
load text1(i)
text1(i).visible=true
2. 完全代码生成:
Dim txt As TextBox
Set txt = Me.Controls.Add("VB.TextBox", "MyControl")
txt.Width = 1000
txt.Height = 300
txt.Visible = True
txt.Left = 0
txt.Top = 0
具体实例见msdn

CtlCfg.vbp 和 CtlView.vbp

此文件夹中的两个工程文件演示了动态控件添加 (Form1.Controls.Add), 或者在运行时添加未引用控件到窗体, ActiveX 文档, 和用户控件。

CtlCfg (控件配置) 示例允许您添加有关任何控件--无论是原有的或用户控件的信息--到 Controls.mdb 数据库。 更重要的是, 如果加载或添加控件需要许可关键字,此数据库正是存储这个控件的许可关键字。这个数据库也可以存储用于控件被动态添加时设置的变量属性。

一旦有关控件的信息被加入数据库,您可以打开 ctlView (控件浏览)示例。这个示例简单地读取
并显示您所能动态添加的控件列表。您可以通过在列表中单击来添加任意控件到此应用程序。

注意: 确定文件 Controls.mdb 具有可写属性。

如果想了解更多有关动态控件添加的信息,请参阅下列帮助主题:

Add Method (Controls Collection)
Add Method (Licenses Collection)
EventInfo Object
Licenses Collection
ObjectEvent Event
Parameter Object (Visual Basic)
回复 点赞
zincoh 2002年06月11日
搞定,谢谢
回复 点赞
foolishtiger 2002年06月11日
摘自MSDN

Add 方法(Controls 集合)示例
Private Sub Form_Load()
Form1.Controls.Add "VB.CommandButton", "cmdObj1", Frame1
With Form1!cmdObj1
.Visible = True
.Width = 2000
.Caption = "Dynamic Button"
End With
End Sub

注意 上面的代码例子使用 ! 作为一个语法要素。您也可以使用标准集合语法如 Form1.Controls("cmdObj1") 来引用该控件。

第二个例子使用 WithEvents 关键字声明一个 CommandButton 类型的对象变量,允许您编程该控件的事件。对象变量被设置为由 Add 方法返回的引用。要试验该例,把它的代码粘贴到声明部分并且运行该工程。

Option Explicit
Private WithEvents btnObj As CommandButton

Private Sub btnObj_Click()
MsgBox "This is a dynamically added button."
End Sub

Private Sub Form_Load()
Set btnObj = Controls.Add("VB.CommandButton", "btnObj")
With btnObj
.Visible = True
.Width = 2000
.Caption = "Hello"
.Top = 1000
.Left = 1000
End With
End Sub

第三个例子添加一个非引用控件到 Controls 集合。然而要编程这样一个控件的事件,必须声明一个 VBControlExtender 类型的对象变量,并把由这个方法返回的引用设置到该对象。然后使用 ObjectEvent 事件编程该控件的事件。

Option Explicit
Dim ctlExtender As VBControlExtender

Private Sub Form_Load()
Set ctlExtender = Controls.Add("Project1.UserControl1", "MyControl")
With ctlExtender
.Visible = True
.Top = 1000
.Left = 1000
End With
End Sub

Private Sub extObj_ObjectEvent(Info As EventInfo)
'使用 Select Case 编程该控件事件。
Select Case Info.Name
Case "UserName"
'检查用户名值。
MsgBox Info. EventParameters("UserName").Value
'现在显示其他情况
Case Else '未知事件
'这里处理未知事件。
End Select
End Sub

回复 点赞
zincoh 2002年06月11日
请注意
“在设计窗体的时候不往窗体上放控件”
回复 点赞
HexiSoft 2002年06月11日
其它方法我不知道
1.窗体上放一个控件TxtM
index=0 visible=false

2.运行时
load TxtM(1) TxtM(1).visible=true
回复 点赞
发动态
发帖子
控件
创建于2007-09-28

1223

社区成员

4.1w+

社区内容

VB 控件
社区公告
暂无公告