這幾個(gè)控件是:Toolbar、Imagelist、Statusbar、Treeview、Listview
這只是本人的學(xué)習(xí)體會(huì),水平有限,謬誤之處一定不少,歡迎斧正。
為確定起見,模仿資源管理器做一個(gè)示例。
一、具體有下面一些功能:
1、窗體自帶一個(gè)用Toolbar生成的菜單
2、左邊是Treeview控件,用來顯示文件夾,每個(gè)節(jié)點(diǎn)表示一個(gè)文件夾
3、右邊是Listview控件,用來顯示左邊選中節(jié)點(diǎn)(文件夾)下一級(jí)的文件夾和文件,每個(gè)Item表示一個(gè)文件夾或者一個(gè)文件
4、下面是Strtusbar控件,顯示一些系統(tǒng)狀態(tài)信息,同時(shí)第六個(gè)窗格顯示即時(shí)操作的動(dòng)作
5、左邊的Treeview可以進(jìn)行的操作有 a、添加節(jié)點(diǎn)(同級(jí)或下級(jí)節(jié)點(diǎn)) b、修改節(jié)點(diǎn)名稱 c、刪除節(jié)點(diǎn) d、拖動(dòng)一個(gè)節(jié)點(diǎn)使其成為另一個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn)(在合法的條件下) e、可以把外部的文件夾或者文件拖放到節(jié)點(diǎn)下,并保存到數(shù)據(jù)庫
6、右邊的Listview可以進(jìn)行的操作有 a、修改Item的名稱 b、刪除Item c、拖動(dòng)一個(gè)Item使其成為另一個(gè)節(jié)點(diǎn)下的文件夾或者文件 d、可以將外部的文件夾或者文件拖放到Listview里,使其成為當(dāng)前節(jié)點(diǎn)下的子文件夾或者文件 e、可以改變Listview的樣式(這里只用了二種樣式) f、可以按第一、第二或第四列排序
先看一下示例的演示
二、本示例涉及內(nèi)容有: 1、建表,字段,數(shù)據(jù)類型,表間關(guān)系 2、建窗體,窗體式樣,在窗體添加控件 3、建模塊,自定義函數(shù),事件過程 4、自動(dòng)化對象:adodb.connection、adodb.recordset、filesystemobject、dictionary 5、sql語句中的select語句,update語句,insert語句,delete語句 6、ado連接,ado記錄集,ado讀寫大字段 7、使用記錄集 8、變量、變量類型轉(zhuǎn)換、數(shù)組 9、用遞歸遍歷指定的文件夾中的所有文件夾和文件、用遞歸遍歷Treeview控件指定節(jié)點(diǎn)下的所有節(jié)點(diǎn) 10、Access自帶的一些功能 11、自定義快捷菜單 12、imagelist,treeview,listwiew,toolbar,progressbar,statusbar等控件的初始化、加載、卸載等。 db1.rar
三、下面來一步步編寫這個(gè)示例
1、先新建一個(gè)mdb,然后新建一個(gè)窗體命名為frmMain,對窗體的式樣進(jìn)行一些設(shè)置后保存
2、然后在vba窗體里,引用microsoft windows common controls 6.0 (sp6)
3、按照從簡至繁的原則,從Toolbar開始,看名稱知道是一個(gè)工具欄控件
a、在窗體添加一個(gè)Toolbar控件 在窗體的設(shè)計(jì)視圖中,打開工具箱,找到Microsoft Toolbar Control 6.0,將其添加到窗體頁眉,適當(dāng)調(diào)整一下大小。 命名為Toolbar0
b、在窗體添加一個(gè)Imagelist控件 Toolbar中的Botton是可以帶圖標(biāo)的。為此,在窗體上添加一個(gè)Imagelist做為圖標(biāo)來源。 在窗體設(shè)計(jì)視圖,從工具箱中找到Microsoft Imagelist Control 6.0 (sp6),將其添加到窗體 命名為Imagelist3,選擇屬性對話框,為它添加圖標(biāo)
c、設(shè)置Toolbar,有二種方法,一種是在Toolbar的屬性對話框中直接設(shè)置。另一種是用代碼設(shè)置
這里采用第一種方法設(shè)置屬性
用第二種方法添加Button和ButtonMenu
添加Button 語法是:Toolbar.Buttons.Add Index, Key, Text, Type, Face
如果這個(gè)Button是下拉式的,還可以添加第二層ButtonMenu 語法是:Toolbar.Buttons(Index).ButtonMenus.Add Index, Key, Text
d、因?yàn)橛玫氖莂ccess,理所當(dāng)然用數(shù)據(jù)表來保存Toolbar的各項(xiàng)參數(shù),創(chuàng)建二個(gè)表
一個(gè)命名為tblTbrBtn,保存Button參數(shù)
另一個(gè)命名為tblTbrBtnMenu,保存ButtonMenu參數(shù)
二個(gè)表之間用ID和PID組成一對多關(guān)系,并鉤選實(shí)施參照完整性、級(jí)聯(lián)更新和級(jí)聯(lián)刪除
e、在表中輸入數(shù)據(jù)
f、在窗體加載事件中輸入代碼,加載Toolbar
Private Sub Form_Load() 加載Toolbar Me.Toolbar0 End Sub
g、下面是加載Toolbar過程,新建一個(gè)模塊,命名為modToolbar,將下面的過程復(fù)制到模塊
Sub 加載Toolbar(ByVal objTbr As Object, ByVal objImglist As Object) Dim Rs As Object With objTbr .Top = 0 .Left = 0 .Width = Forms("frmMain").InsideWidth Set Rs = CurrentDb.OpenRecordset("select * from tblTbrBtn order by id") Do Until Rs.EOF .Buttons.Add CInt(Rs(0)), CStr(Rs(1)), CStr(Rs(2)), CStr(Rs(3)), CInt(Rs(4)) Rs.movenext Loop Set Rs = Nothing Set Rs = CurrentDb.OpenRecordset("select * from tblTbrBtnMenu order by pid, id") Do Until Rs.EOF .Buttons(CInt(Rs(1))).ButtonMenus.Add CInt(Rs(0)), CStr(Rs(2)), CStr(Rs(3)) Rs.movenext Loop Set Rs = Nothing End With End Sub
h、加載完成后的窗體,圖13
i、為所有的Button和ButtonMenu的單擊事件指定過程
Private Sub Toolbar0_ButtonClick(ByVal Button As Object) If Button.Key = "Exit" Then DoCmd.Close acForm, Me.Name Else TbrClick Button.Key End If End Sub
Private Sub Toolbar0_ButtonMenuClick(ByVal ButtonMenu As Object) TbrClick ButtonMenu.Key End Sub
j、下面的按鈕過程放在模塊modToolbar中 Sub TbrClick(ByVal strAction As String) MsgBox "當(dāng)前調(diào)用的過程:" & strAction End Sub
k、點(diǎn)擊后的效果。至于調(diào)用的過程,也放在同一個(gè)模塊中,如何寫代碼等具體使用時(shí)繼續(xù)。 |
12.JPG(103.27 KB, 下載次數(shù): 6) 4、Statusbar控件,看名稱就知道是狀態(tài)欄控件。接下來操作與Toolbar類似 a、在窗體頁腳添加一個(gè)Statusbar控件,命名為Statusbar0,適當(dāng)調(diào)整一下大小
b、創(chuàng)建一個(gè)數(shù)據(jù)表用來保存控件的參數(shù),命名為tblStatusbar,并輸入數(shù)據(jù)
c、添加Panel 語法:Statusbar.Panels.Add index, key, text, Style 其中style有幾個(gè)特定的值是用來顯示電腦硬件信息的,這時(shí)候的text是默認(rèn)的 d、添加Panel以后,對每一個(gè)Panel的屬性進(jìn)行設(shè)置 e、在窗體的加載事件中添加一句,成為: Private Sub Form_Load() 加載Toolbar Me.Toolbar0 加載StatusBar Me.StatusBar0, Me.ImageList3.Object End Sub f、下面是加載過程。新建一個(gè)模塊,命名modStatusbar,把下面的代碼復(fù)制進(jìn)去 Sub 加載StatusBar(ByVal objStatusBar As Object, ByVal objImagelist As Object) Dim Rs As Object With objStatusBar .Top = 0 .Left = 0 .Width = Forms("frmMain").InsideWidth Set Rs = CurrentDb.OpenRecordset("select * from tblStatusbar order by id") Do Until Rs.EOF If IsNull(Rs(2)) Then .Panels.Add CInt(Rs(0)), Rs(1), , CInt(Rs(3)) ElseIf Rs("strtext") = "currentuser" Then .Panels.Add CInt(Rs(0)), Rs(1), CurrentUser(), CInt(Rs(3)) Else .Panels.Add CInt(Rs(0)), Rs(1), Rs(2), CInt(Rs(3)) End If With .Panels(Int(Rs(0))) If CInt(Rs(4)) <> 0 Then .Picture = objImagelist.ListImages(CInt(Rs(4))).Picture End If .Alignment = Rs(5) .AutoSize = Rs(6) .Bevel = Rs(7) .Width = Rs(8) .ToolTipText = Rs(9) End With Rs.movenext Loop Set Rs = Nothing End With End Sub g、其中第六個(gè)Panel是用來顯示用戶的操作信息的,當(dāng)用戶進(jìn)行不同的操作時(shí),提示簡短的文字 過程如下,可以在需要的地方調(diào)用 Sub pnlEditText(ByVal strPnltext As String) Forms("frmMain").Controls("StatusBar2").Panels(6).Text = strPnltext End Sub h、然后把原來在modToolbar中的那個(gè)點(diǎn)擊事件過程中msgbox顯示的信息,改到用Ststusbar來顯示。 Msgbox "當(dāng)前調(diào)用的過程:" & strAction 改為 pnlEditText "當(dāng)前調(diào)用的過程:" & strAction i、加載Toolbar和Statusbar以后的窗體,圖18
三個(gè)比較簡單的控件已經(jīng)ok了。重點(diǎn)是如何設(shè)計(jì)出合適的數(shù)據(jù)表并且添加合適的數(shù)據(jù),然后創(chuàng)建合適的記錄集來對控件進(jìn)行加載。 接下去是二個(gè)相對要復(fù)雜一些的控件Treeview和Listview,暫時(shí)先到這里。
|