您的位置:首页 > 编程语言 > VB

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: