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

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