在VB中如何动态创建控件??

在VB中如何动态创建控件??
比如动态创建label控件
不然太占资源
我的一个程序需要很多很多控件
日啊
动态建立label等常规控件还用ocx啊
你别瞎复制好么?

讲话要文明点,特别是问问题时

给你两种方法

Option Explicit
Dim oCtrl As Object
'使得控件可以响应事件
Dim WithEvents MyBtn As CommandButton
Private Sub Form_Load()
Dim i As Integer
'先在窗体上加载个Label1(0)的标签控件
For i = 1 To 3
Load Me.Label1(i)
Label1(i).Top = Label1(i - 1).Top + 2 * Label1(0).Height
Label1(i).Caption = "Label1(" & i & ")"
Label1(i).Visible = True
Next
'Debug.Print Me.Label1.Count
LoadControl
LoadControlWithEvents
End Sub
Private Sub LoadControl()
Set oCtrl = Controls.Add("VB.CommandButton", "Button1")
With oCtrl
.Caption = "不会响应事件的按钮"
.Width = 2000
.Left = 100
.Top = 200
.Visible = True '控件加载后默认为不可见,故此步骤至关重要!
End With
End Sub
Private Sub LoadControlWithEvents()
Set MyBtn = Controls.Add("VB.CommandButton", "Button2")
With MyBtn
.Caption = "我可以响应事件!"
.Width = 1800
.Left = 100
.Top = 700
.Visible = True
End With
End Sub
Private Sub MyBtn_Click()
MsgBox "我要移除动态加载的控件了!"
Me.Controls.Remove "Button1"
Me.Controls.Remove "Button2"
End Sub
温馨提示:内容为网友见解,仅供参考
第1个回答  2006-03-24
1.
在程序中注册和注销 OCX 控件
声明(在本例子里使用的是 ComCtl32.OCX,如果是其他,使用相应的名称):
Declare Function RegComCtl32 Lib "ComCtl32.OCX" _
Alias "DllRegisterServer" () As Long
Declare Function UnRegComCtl32 Lib "ComCtl32.OCX" _
Alias "DllUnregisterServer" () As Long
Const ERROR_SUCCESS = &H0

使用:

If RegComCtl32 = ERROR_SUCCESS Then
MsgBox "Registration Successful"
Else
MsgBox "Registration Unsuccessful"
End If

If UnRegComCtl32 = ERROR_SUCCESS Then
MsgBox "UnRegistration Successful"
Else
MsgBox "UnRegistration Unsuccessful"
End If

2.
建立可下拉选择的属性
例如在 BorderStyle 中有以下的四个选择:
0 - None
1 - Dashed
2 - Single Line
3 - Double Line
4 - 3D
首先在控件中定义以下的集合:
Enum BorderType
None
Dashed
[Single Line]
[Double Line]
[3D]
End Enum
然后就可以把属性的类型设置好:
Public Property Get BorderStyle() As BorderType
Border = m_BorderStyle
End Property

Public Property Let BorderStyle(ByVal New_BorderStyle As BorderType)
m_BorderStyle = New_BorderStyle
PropertyChanged "BorderStyle"
End Property

3.
缺省值和可选参数
VB5 加强了函数参数方面,可用以下的代码实现参数缺省:

Property Get Value(Optional index As Long = 1)
...
End Property
也可使用另一个方法(慢):

Property Get Value(Optional index As Long)
If IsMissing(index) Then index = 1
...
End Property

4.
多个参数的属性
在自制的控件中,可能需要对某个属性传递多个值:

Property Let Test (arg1 As String, arg2 As String, arg3 As Integer)
End Property

`用以下的方法传递参数:
Test(arg1,arg2) = arg3

5.
使用数组做属性
定义一个 variant 类型的属性,即可用它来做数组。
下面定义了一个 CArray 类。

Private m_MyArray As Variant

Public Property Get MyArray() As Variant
MyArray = m_MyArray
End Property

Public Property Let MyArray(a As Variant)
m_MyArray = a
End Property

可用以下的方法使用:

Private m_Array As CArray
Private mArr(3) As String

Private Sub Form_Load()
Set m_Array = New CArray
mArr(1) = "One"
mArr(2) = "Two"
mArr(3) = "Three"
m_Array.MyArray = mArr()
`或者
`m_Array.MyArray = Array("One", "Two", "Three")
End Sub

Private Sub Form_Unload(Cancel As Integer)
Dim i As Integer
For i = 1 To UBound(m_Array.MyArray)
MsgBox m_Array.MyArray(i)
Next
End Sub

参考资料:http://www.5axx.net/article/vb/11264111.html

vb中如何动态添加控件数组? 我现在已经用controls.add添加了一个控件...
Private Sub Command1_Click()CreateTextbox End Sub Private Sub Command2_Click()Set txtTotal(1) = Controls.Add("VB.TextBox", "txtTotal1")txtTotal(1).Move 3000, 800, 1200, 300 txtTotal(1).Visible = True End Sub 这样算不算 像设计放置控件的方法一好像不能实现 ...

在VB中如何动态创建控件??
Set oCtrl = Controls.Add("VB.CommandButton", "Button1")With oCtrl .Caption = "不会响应事件的按钮".Width = 2000 .Left = 100 .Top = 200 .Visible = True '控件加载后默认为不可见,故此步骤至关重要!End With End Sub Private Sub LoadControlWithEvents()Set MyBtn = Controls.Add...

如何在VB动态创建Image控件,每点一下按钮,弹出一个Image?
可以用Controls.add方法来动态新增,如:'\/\/ 新增一个控件 Set objNew = Me.Controls.add("VB.Image", "名称")Set objNew.Container = Picture1 With objNew .Left = 10 .Top = 10 .Stretch = False .Picture = LoadPicture("图片路径").Visible = True End With ...

求教VB中如何动态生成textbox控件
首先,在窗体画一个名为Text1的文本框,将其Index属性设置为0,Left属性设置为100,Top属性设置为100.再在窗体上添加一个命令按钮,其单击事件代码如下:Private Sub Command1_Click() Dim n As Integer n = InputBox("请输入要生成文本框的个数", , 5) For i = 1 To n - 1 Load...

vb如何在运行过程中动态的创建按钮,标签,文本框等对象?
添加动态按钮,及关联按钮事件的方法如下 --- ' 声明对象 Dim newButton As New System.Windows.Forms.Button ' 预设对象 With newButton .Name = [按钮控件名称].Text = [按钮显示内容].Location = New Point([x位置], [y位置]).Size = New System.Drawing.Size([控件宽], [控件高]).Fla...

vb 动态创建 vsflexgrid 控件
从视图菜单中打开对象浏览器,找到该控件,下面说明面板中指出了它所在的库,这是链接,点击一下定位到该库,在说明面板中有Libray 库名。建立控件时把这个库名也加进去。Controls.add 的第三个参数就是指容器,一般控件都有Container属性,动态建立后把容器控件赋给该属性也是可以的。

VB6.0中,如何动态添加控件至指定的PictureBox控件中?
可以使用Load方法 语法为:Load object 要求必须预先创建一个控件数组 例如,现在你已经创建了一个command的控件数组,它的name为cmd (方法请自行百度)开始的一个元素的调用方法为 Cmd1(0).属性 其中()内的为操作元素的下标。只要Load对应的数组元素。即可完成元素的载入,载入成功后可以当做一个普通控件...

如何动态添加VB控件。比如在窗体中动态添加Picturebox控件。
先在窗体设计过程中手工增加一个picture1,index属性设定为0 程序中要增加一个控件,就用:Load Picture1(i) 'i为索引号,1-n 最好顺序递增 Picture1(i).Visible = True '这句非常重要,否则新增的图片框看不到 Picture1(i).Move x, y, w, h '设定图片框的坐标和大小 ...

在VB中如何动态的去生成一个Label控件
Dim l1 As LabelSet l1 = Me.Controls.Add("VB.Label", "l1")l1.Caption = "我是动态创建的Label控件"l1.Left = 300l1.Top = 150l1.Visible = True适用于VB6

VB中动态生成和删除WEBBROWSER控件方法
比较随意的方法是,在你的窗口上画一个webbrowser控件,定义一个名字,假设是wb,然后(关键)在index属性上输入0。这样这个控件的名字就是wb(0)。在程序中可以用一个counter变量标记你现在有多少个wb。比如在你需要新建一个webbrowser的时候,就这样:load wb(counter)counter = counter + 1 这样做的...

相似回答