在VB中如何动态创建控件??
在VB中如何动态创建控件??比如动态创建label控件不然太占资源我的一个程序需要很多很多控件日啊动态建立label等常规控件还用ocx啊你别瞎复制好么?...
在VB中如何动态创建控件??
比如动态创建label控件
不然太占资源
我的一个程序需要很多很多控件
日啊
动态建立label等常规控件还用ocx啊
你别瞎复制好么? 展开
比如动态创建label控件
不然太占资源
我的一个程序需要很多很多控件
日啊
动态建立label等常规控件还用ocx啊
你别瞎复制好么? 展开
2个回答
展开全部
讲话要文明点,特别是问问题时
给你两种方法
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
给你两种方法
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.
在程序中注册和注销 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
在程序中注册和注销 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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询