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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章