本文链接:/nxhujiee/article/details/5950877
在VB开发中,向窗口上添加控件有两种方法,一是设计阶段,一是运行阶段。比较简单的是在设计阶段完成的。但很多时候我们无法确定需要多少个控件,比如编写一个多页记事本,我们不可能在设计阶段就添加几十或上百个编辑框在窗口上,因为你不知道用户会打开多少个文件。
在程序运行阶段用代码动态添加控件是一种常见的方法。如上面的例子中我们就需要动态添加编辑框,用户每打开一个文件,就动态添加一个编辑框。
动态添加控件使用controls对象的add方法,格式:
controls.add (添加控件的类名,控件的名称,所属的父窗体)
下面是我写好的一个多页面记事本的框架。动态添加和引用部分我都已经写好了,没有写编辑功能的代码。如果你想拥有一个自己的记事本,可以下载后自己添加相关的代码,给自己打造一个适合自己的记事本。
动态添加、引用控件的相关代码
PrivateSubmnuFileNew_Click()"新建
Calladdtab
EndSub
PrivateSubaddtab()"新建时动态添加编辑控件
DimaAsMSWLess.WLText
DimiAsInteger
DimhdAsLong
SSTab1.Tabs=SSTab1.Tabs+1
SSTab1.Tab=SSTab1.Tabs-1
i=SSTab1.Tabs
SSTab1.TabsPerRow=i+1
Seta=Me.Controls.Add("MSWLess.WLText","rtbox"&CStr(i-1),SSTab1)"第3个参数指定了父窗体为SSTab1
a.Move60,360,sw,sh
a.Tag=i-1
Debug.Printi,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)‘这里就可以不用指定父窗体了
EndSub
PrivateSubForm_Resize()"同步缩放
SSTab1.Width=Me.Width-100
SSTab1.Height=Me.ScaleHeight-670
sw=SSTab1.Width-125
sh=SSTab1.Height-425
sl=60
st=360
"----------------以下引用动态控件------------------------------
DimiAsInteger
DimaAsString
i=SSTab1.Tab
a="rtbox"&CStr(i)
Ifa="rtbox0"Thena="wltext1"
Me.Controls(a).Move60,360,sw,sh
"------也可以用下面的方法调整全部编辑框大小-------
"DimbAsControl
"ForEachbInMe.Controls
"IfTypeOfbIsWLTextThen
"b.Move60,360,sw,sh
"EndIf
"Next
EndSub
PrivateSubSSTab1_Click(PreviousTabAsInteger)
DimiAsInteger
DimtbAsWLText
IfSSTab1.Tab=0Then
WLText1.Move60,360,sw,sh
EndIf
"---------------重要:根据名称引用动态控件/点击TAB标签时自动缩放当前页-----------------
DimaAsControl
ForEachaInMe.Controls
IfTypeOfaIsWLTextThen
Ifa.Name="rtbox"&SSTab1.TabThen
a.Move60,360,sw,sh
EndIf
EndIf
Next
EndSub
PrivateSubSSTab1_DblClick()"双击隐藏当前文章
DimiAsInteger
i=SSTab1.Tab
Ifi<>0ThenSSTab1.TabVisible(i)=False
EndSub
PrivateSubmnuFileOpen_Click()"打开文件
DimsFileAsString
DimiAsInteger
DimaAsString
Dimstring1AsString
WithdlgCommonDialog
.DialogTitle="打开"
.CancelError=False
.Filter="所有文件(*.*)|*.*"
.ShowOpen
IfLen(.FileName)=0Then
ExitSub
EndIf
sFile=.FileName
OpendlgCommonDialog.FileNameForInputAs#1
string1=StrConv(InputB$(LOF(1),1),vbUnicode)
"----------------以下引用动态控件------------------------------
i=SSTab1.Tab
a="rtbox"&CStr(i)
Ifa="rtbox0"Thena="wltext1"
Me.Controls(a).Text=string1
"-------------------------------------------------------------------
Close#1
EndWith
EndSub
源码下载:
http://good.gd/762657.htm