VB:动态添加控件的示例

    在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

发布了14 篇原创文章 · 获赞 7 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/nxhujiee/article/details/5950877