文件系統控件方案:文件搜索器
應用程序因為用戶常常希望快速查找應用程序的可用文件或文件組,所以,許多應用程序都提供查詢文件系統的功能。Winseek.vbp示例應用程序協助用戶浏覽驅動器和目錄並顯示所有類型的文件。
下表總結了WinSeek應用程序在Seek.frm窗體中使用的控件。
注意文件系統控件沒有caption屬性,雖然可為它們加標簽並指定訪問鍵。關於這種使用標簽的方法的詳細信息,請參閱本章後面的“使用Label控件”一節。
編寫WinSeek應用程序的代碼
用鼠標單擊驅動器列表框中的項目就會觸發Change事件。當用戶選定項目並接著改變窗體上的焦點時也將觸發Change事件。在目錄列表框中,需要DblClick事件生成Change事件。
當用戶不想用鼠標變更目錄時,通常使用箭頭鍵選定需要的目錄,然後按ENTER鍵。
因為ENTER鍵通常與缺省CommandButton控件關聯,所以,WinSeek必須識別用戶在何時只是想變更目錄而不搜索文件。
通過判斷dirList列表框的路徑是否不同於當前突出顯示的目錄,WinSeek應用程序解決了這個問題。當用戶單擊目錄列表框中的項目或用箭頭鍵在目錄列表框中移動時,可能發生這種情況。下列代碼判斷dirList.Path是否與突出顯示的目錄不同。若不同,則更新dirList.Path。若相同,則執行搜索操作。
PrivateSubcmdSearch_Click()
.
.
.
'若dirList.Path與當前選定目錄不同,
'則執行更新操作;否則執行'搜索操作。
IfdirList.Path<>dirList.List(dirList.ListIndex)Then
dirList.Path=dirList.List(dirList.ListIndex)
ExitSub
EndIf
'繼續搜索。
.
.
.
EndSub
WinSeek應用程序使用下述過程處理重要的事件:
drvList_Change過程
dirList_Change過程
cmdSearch_Click過程
DriveListBox控件的Change事件
當用戶單擊驅動器列表框的項目時就會生成控件的Change事件。此時將調用drvList_Change事件過程並運行下述代碼: PrivateSubdrvList_Change()
OnErrorGoToDriveHandler
'若選定新驅動器,則Dir1列框'更新顯示。
dirList.Path=drvList.Drive
ExitSub
'若發生錯誤,則用dirList.Path重新設置drvList.Drive。
DriveHandler:
drvList.Drive=dirList.Path
ExitSub
EndSub
注意,無論用鼠標單擊還是移動選項(例如,利用箭頭鍵移動),在選定新驅動器時都將在驅動器列表框中發生Change事件。試圖訪問未關閉驅動器門的軟盤驅動器,或者選定一個無意中已切斷連接的網絡驅動器,諸如此類的操作都將觸發錯誤處理程序。因為出錯後不能按原先的安排賦值,所以dirList.Path仍包含先前的有效驅動器。將dirList.Path重新賦予drvList.Drive後就可更正這個錯誤。
詳細信息請參閱第十三章“調試代碼和處理錯誤”。
DirListBox控件的Change事件
如果用戶雙擊目錄列表框中的項目或在代碼中(如drvList_Change過程中)變更dirList的Path屬性,就會啟動dirList_Change事件。下列代碼響應此事件:
PrivateSubdirList_Change()
'更新文件列表框,以便與目錄列表框同步。
filList.Path=dirList.Path
EndSub
此事件過程將dirList列表框的Path屬性賦予filList列表框的Path屬性。這將在filList列表框中觸發重新繪制的PathChange事件;不必在filList_PathChange過程中添加代碼,因為此應用程序中的事件在filList列表框結束。
CommandButton控件的Click事件
此事件過程判斷dirList列表框中突出顯示的項目是否和dirList.Path相同。若項目不同,則更新dirList.Path;否則執行搜索操作。
PrivateSubcmdSearch_Click()
.
.
.
'若dirList.Path與當前選定的目錄不同,
'則更新;否則執行搜索。
IfdirList.Path<>dirList.List_
(dirList.ListIndex)Then
dirList.Path=dirList.List(dirList.ListIndex)
ExitSub
EndIf
'繼續搜索。
.
.
.
EndSub
注意可用附加功能增強WinSeek應用程序。例如會出現這樣的情況,希望使用文件控件的屬性。這時可通過使用復選框使用戶設置文件屬性的不同組合,以使文件列表框顯示Hidden、System等等屬性的文件。這將把搜索限制在滿足條件的文件中。