VB:动态添加控件的示例
2010-10-19 11:29
357 查看
在VB开发中,向窗口上添加控件有两种方法,一是设计阶段,一是运行阶段。比较简单的是在设计阶段完成的。但很多时候我们无法确定需要多少个控件,比如编写一个多页记事本,我们不可能在设计阶段就添加几十或上百个编辑框在窗口上,因为你不知道用户会打开多少个文件。
在程序运行阶段用代码动态添加控件是一种常见的方法。如上面的例子中我们就需要动态添加编辑框,用户每打开一个文件,就动态添加一个编辑框。
动态添加控件使用controls对象的add方法,格式:
controls.add (添加控件的类名,控件的名称,所属的父窗体)
下面是我写好的一个多页面记事本的框架。动态添加和引用部分我都已经写好了,没有写编辑功能的代码。如果你想拥有一个自己的记事本,可以下载后自己添加相关的代码,给自己打造一个适合自己的记事本。
动态添加、引用控件的相关代码
Private
Sub
mnuFileNew_Click
() '新建
Call
addtab
End
Sub
Private
Sub
addtab() '新建时动态添加编辑控件
Dim
a As MSWLess.WLText
Dim
i As Integer
Dim
hd As Long
SSTab1.Tabs = SSTab1.Tabs + 1
SSTab1.Tab = SSTab1.Tabs - 1
i = SSTab1.Tabs
SSTab1.TabsPerRow = i + 1
Set
a = Me.Controls.Add("MSWLess.WLText"
, "rtbox"
& CStr
(i - 1), SSTab1) '第3个参数指定了父窗体为SSTab1
a.Move 60, 360, sw, sh
a.Tag = i - 1
Debug.Print
i, SSTab1.Tab, a.Tag, a.Name
a.Text
= "新文件"
& CStr
(i)
SSTab1.Caption = "新文件"
& CStr
(i)
a.Visible = True
a.MultiLine = True
a.ScrollBars = wlVertical
' hd = SetParent(a.hWnd, SSTab1.hWnd) ‘这里就可以不用指定父窗体了
End
Sub
Private
Sub
Form
_Resize() '同步缩放
SSTab1.Width = Me.Width - 100
SSTab1.Height = Me.ScaleHeight - 670
sw = SSTab1.Width - 125
sh = SSTab1.Height - 425
sl = 60
st = 360
'---------------- 以下引用动态控件 ------------------------------
Dim
i As Integer
Dim
a As String
i = SSTab1.Tab
a = "rtbox"
& CStr
(i)
If
a = "rtbox0"
Then
a = "wltext1"
Me.Controls(a).Move 60, 360, sw, sh
'------也可以用下面的方法调整全部编辑框大小-------
' Dim b As Control
' For Each b In Me.Controls
' If TypeOf b Is WLText Then
' b.Move 60, 360, sw, sh
' End If
' Next
End
Sub
Private
Sub
SSTab1_Click
(PreviousTab As Integer)
Dim
i As Integer
Dim
tb As WLText
If
SSTab1.Tab = 0 Then
WLText1.Move 60, 360, sw, sh
End
If
'--------------- 重要:根据名称引用动态控件 / 点击TAB标签时自动缩放当前页 -----------------
Dim
a As Control
For
Each
a In
Me.Controls
If
TypeOf a Is
WLText Then
If
a.Name = "rtbox"
& SSTab1.Tab Then
a.Move 60, 360, sw, sh
End
If
End
If
Next
End
Sub
Private
Sub
SSTab1_DblClick() '双击隐藏当前文章
Dim
i As Integer
i = SSTab1.Tab
If
i <> 0 Then
SSTab1.TabVisible(i) = False
End
Sub
Private
Sub
mnuFileOpen_Click
() '打开文件
Dim
sFile As String
Dim
i As Integer
Dim
a As String
Dim
string1 As String
With dlgCommonDialog
.DialogTitle = "打开"
.CancelError = False
.Filter
= "所有文件 (*.*)|*.*"
.ShowOpen
If
Len
(.FileName) = 0 Then
Exit
Sub
End
If
sFile = .FileName
Open dlgCommonDialog.FileName For
Input As #1
string1 = StrConv(InputB$(LOF(1), 1), vbUnicode)
'---------------- 以下引用动态控件 ------------------------------
i = SSTab1.Tab
a = "rtbox"
& CStr
(i)
If
a = "rtbox0"
Then
a = "wltext1"
Me.Controls(a).Text
= string1
'-------------------------------------------------------------------
Close #1
End
With
End
Sub
源码下载:
http://good.gd/762657.htm
在程序运行阶段用代码动态添加控件是一种常见的方法。如上面的例子中我们就需要动态添加编辑框,用户每打开一个文件,就动态添加一个编辑框。
动态添加控件使用controls对象的add方法,格式:
controls.add (添加控件的类名,控件的名称,所属的父窗体)
下面是我写好的一个多页面记事本的框架。动态添加和引用部分我都已经写好了,没有写编辑功能的代码。如果你想拥有一个自己的记事本,可以下载后自己添加相关的代码,给自己打造一个适合自己的记事本。
动态添加、引用控件的相关代码
Private
Sub
mnuFileNew_Click
() '新建
Call
addtab
End
Sub
Private
Sub
addtab() '新建时动态添加编辑控件
Dim
a As MSWLess.WLText
Dim
i As Integer
Dim
hd As Long
SSTab1.Tabs = SSTab1.Tabs + 1
SSTab1.Tab = SSTab1.Tabs - 1
i = SSTab1.Tabs
SSTab1.TabsPerRow = i + 1
Set
a = Me.Controls.Add("MSWLess.WLText"
, "rtbox"
& CStr
(i - 1), SSTab1) '第3个参数指定了父窗体为SSTab1
a.Move 60, 360, sw, sh
a.Tag = i - 1
Debug.Print
i, SSTab1.Tab, a.Tag, a.Name
a.Text
= "新文件"
& CStr
(i)
SSTab1.Caption = "新文件"
& CStr
(i)
a.Visible = True
a.MultiLine = True
a.ScrollBars = wlVertical
' hd = SetParent(a.hWnd, SSTab1.hWnd) ‘这里就可以不用指定父窗体了
End
Sub
Private
Sub
Form
_Resize() '同步缩放
SSTab1.Width = Me.Width - 100
SSTab1.Height = Me.ScaleHeight - 670
sw = SSTab1.Width - 125
sh = SSTab1.Height - 425
sl = 60
st = 360
'---------------- 以下引用动态控件 ------------------------------
Dim
i As Integer
Dim
a As String
i = SSTab1.Tab
a = "rtbox"
& CStr
(i)
If
a = "rtbox0"
Then
a = "wltext1"
Me.Controls(a).Move 60, 360, sw, sh
'------也可以用下面的方法调整全部编辑框大小-------
' Dim b As Control
' For Each b In Me.Controls
' If TypeOf b Is WLText Then
' b.Move 60, 360, sw, sh
' End If
' Next
End
Sub
Private
Sub
SSTab1_Click
(PreviousTab As Integer)
Dim
i As Integer
Dim
tb As WLText
If
SSTab1.Tab = 0 Then
WLText1.Move 60, 360, sw, sh
End
If
'--------------- 重要:根据名称引用动态控件 / 点击TAB标签时自动缩放当前页 -----------------
Dim
a As Control
For
Each
a In
Me.Controls
If
TypeOf a Is
WLText Then
If
a.Name = "rtbox"
& SSTab1.Tab Then
a.Move 60, 360, sw, sh
End
If
End
If
Next
End
Sub
Private
Sub
SSTab1_DblClick() '双击隐藏当前文章
Dim
i As Integer
i = SSTab1.Tab
If
i <> 0 Then
SSTab1.TabVisible(i) = False
End
Sub
Private
Sub
mnuFileOpen_Click
() '打开文件
Dim
sFile As String
Dim
i As Integer
Dim
a As String
Dim
string1 As String
With dlgCommonDialog
.DialogTitle = "打开"
.CancelError = False
.Filter
= "所有文件 (*.*)|*.*"
.ShowOpen
If
Len
(.FileName) = 0 Then
Exit
Sub
End
If
sFile = .FileName
Open dlgCommonDialog.FileName For
Input As #1
string1 = StrConv(InputB$(LOF(1), 1), vbUnicode)
'---------------- 以下引用动态控件 ------------------------------
i = SSTab1.Tab
a = "rtbox"
& CStr
(i)
If
a = "rtbox0"
Then
a = "wltext1"
Me.Controls(a).Text
= string1
'-------------------------------------------------------------------
Close #1
End
With
End
Sub
源码下载:
http://good.gd/762657.htm
相关文章推荐
- Excel VBA 在工作表(Worksheet)中动态添加按钮控件并添加事件的示例
- vb 类 动态 添加 控件
- vb.net2005动态添加网页控件的事件
- VB动态添加控件的问题
- 玩无限消乐的设计示例(基础篇)DataGridView控件动态添加、设置、试载图片
- VB ACTIVEREPORT 2 动态添加控件 Barcode lable pagebreak
- 在VB中动态添加可响应消息的控件
- VB运行时动态注册添加控件的方法
- VB.NET中动态添加控件数组
- VB动态添加WebBrowser控件,并拦截弹出窗口(不用引用任何组件)
- vb动态添加控件的事例
- win7 下完美解决VB 动态添加的flash 控件 fscommand 消息未触发的方法
- VB 动态添加控件及磁盘、目录、文件控件
- VB动态添加 控件
- VB 动态添加删除控件汇总
- 在VB中动态添加可响应消息的控件
- VB编写ActiveX控件时,动态添加控件到某个容器
- VB.NET在窗体上添加任意动态控件
- VB 如何提取网页源带码中的url链接,动态添加控件实例
- JS实现动态给标签控件添加事件的方法示例