版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第5章文件與資源管理
5.1資源管理技術(shù)5.2文件訪問技術(shù)5.3對話框控件習(xí)題實(shí)驗(yàn)五記事本
5.1資源管理技術(shù)
【案例5-1】
類似Windows資源管理器功能的窗體(1)。瀏覽計(jì)算機(jī)邏輯盤及邏輯盤上的資源(各邏輯盤及邏輯盤上的文件夾及其文件)。
用TreeView和ListView兩個(gè)主要控件及ImageList1控件、StatusBar控件和RichTextBox控件可實(shí)現(xiàn)類似Windows資源管理器窗體。在TreeView控件中顯示計(jì)算機(jī)中的邏輯盤,當(dāng)單擊某個(gè)邏輯盤時(shí),顯示此邏輯盤中的文件夾,此時(shí)選擇某個(gè)文件夾,在ListView控件中顯示此文件夾中的文件名稱等。另外,當(dāng)鼠標(biāo)位于左右窗格分界處Splitter控件上時(shí),可以調(diào)整左右窗格的大小。效果圖如圖5-1所示。圖5-1案例5-1設(shè)計(jì)界面
【技能目標(biāo)】
能利用前面學(xué)習(xí)過的控件(ImageList1控件、StatusBar控件和RichTextBox控件)及TreeView控件和ListView控件設(shè)計(jì)出類似Windows資源管理器功能的窗體,以瀏覽計(jì)算機(jī)邏輯盤及邏輯盤上的資源(各邏輯盤及邏輯盤上的文件夾及文件夾下的文件)。
【操作要點(diǎn)與步驟】
(1)建立一個(gè)新的Windows應(yīng)用程序,命名為VBnet5-1。啟動(dòng)VB.NET,新建一個(gè)“Windows應(yīng)用程序”項(xiàng)目,項(xiàng)目名為VBnet5-1,該項(xiàng)目存放在“D:\VB.net”目錄下。
(2)窗體設(shè)計(jì)。輸入項(xiàng)目名及該項(xiàng)目存放目錄后,在所出現(xiàn)的窗體上放置ImageList1控件、TreeView控件、StatusBar控件、ListView控件、Splitter控件和RichTextBox控件。
(3)設(shè)置窗體及各控件屬性。按表5-1設(shè)置窗體及各控件的屬性,窗體設(shè)計(jì)和各控件屬性設(shè)置后的效果圖如圖5-2所示。
●設(shè)置ImageList1控件Images的Collection集合屬性。圖5-2窗體設(shè)計(jì)及各控件屬性設(shè)置后的效果圖圖5-3添加ImageList1控件Images的Collection集合屬性
①?ImageList1控件Images的Collection集合屬性所需要的圖片文件在VB.NET的安裝文件夾中或在因特網(wǎng)上可以找到。
②注意添加圖片文件的順序。第1、2、3、4幅圖片所對應(yīng)的文件名分別是MYCMP.ICO、DRIVDSE.ICO、CLSDFOLD.ICO和OPENFOLD.ICO,對應(yīng)的圖片索引號(hào)分別為0、1、2、3。
●設(shè)置TreeView1控件Nodes的Collection集合屬性(只添加根節(jié)點(diǎn),子節(jié)點(diǎn)由程序?qū)崿F(xiàn))。
在圖5-4中單擊“添加根”按鈕,在“標(biāo)簽”下的文本框中輸入“我的電腦”;在“圖像”的下拉列表框中選擇第1幅圖片;在“選定的圖像”的下拉列表框中選擇第1幅圖片后按確定按鈕。圖5-4TreeView1控件Nodes的Collection集合屬性●設(shè)置StatusBar控件Panels屬性的Collection集合屬性(SBPFile屬性)。
在圖5-5中右半邊已經(jīng)顯示SBPFile成員屬性,SBPFont和SBPCount成員屬性分別如圖5-6和圖5-7所示。這三個(gè)成員屬性是通過單擊圖5-5中的“添加”按鈕添加的。
●設(shè)置StatusBar控件Panels屬性的Collection集合屬性(SBPFont屬性)。
●設(shè)置StatusBar控件Panels屬性的Collection集合屬性(SBPCount屬性)。圖5-5StatusBar控件Panels屬性的Collection集合屬性(SBPFile屬性)圖5-6StatusBar控件Panels屬性的Collection集合屬性(SBPFont屬性)圖5-7StatusBar控件Panels屬性的Collection集合屬性(SBPCount屬性)●設(shè)置ListView控件Columns屬性的Collection集合屬性(FileName屬性)。
在圖5-8中,右半邊顯示FileName屬性。LastAccess屬性如圖5-9所示。這兩個(gè)屬性是通過單擊圖5-8中的“添加”按鈕添加的。
●設(shè)置ListView控件Columns屬性的Collection集合屬性(LastAccess屬性)。圖5-8ListView控件Columns屬性的Collection集合屬性(FileName屬性)圖5-9ListView控件Columns屬性的Collection集合屬性(LastAccess屬性)
(4)完成了界面及各控件的屬性設(shè)計(jì)后,還需要編寫代碼才能實(shí)現(xiàn)所需要的功能。因?yàn)樵摪咐獮g覽計(jì)算機(jī)邏輯盤及邏輯盤上的資源(各邏輯盤上的文件夾及文件夾下的文件),所以首先在程序代碼的最開頭使用語句ImportsSystem.IO,以引用System.IO命名空間;同時(shí)為了能完成本章中所有案例的功能,在整個(gè)程序模塊中應(yīng)定義一些公共變量。引用命名空間及定義公共變量的代碼如下:
(5)為了能夠?yàn)g覽邏輯盤和文件夾,在TreeView1_AfterSelect事件中根據(jù)用戶所選擇節(jié)點(diǎn)的類型決定調(diào)用不同的自定義函數(shù)。如果用戶選擇的是根節(jié)點(diǎn),則調(diào)用自定義函數(shù)DispDriver();如果用戶選擇的是子節(jié)點(diǎn),則調(diào)用DispDir()自定義函數(shù)。為了在用戶選擇子節(jié)點(diǎn)時(shí)能夠在ListView控件中顯示此子節(jié)點(diǎn)(文件夾)下的文件,在TreeView1控件中列舉完此子節(jié)點(diǎn)(文件夾)下的文件夾后,再調(diào)用DispFile()自定義函數(shù),ListView控件中的列表即顯示此子節(jié)點(diǎn)(文件夾)下的文件。
調(diào)用自定義函數(shù)的程序及三個(gè)自定義函數(shù)DispDriver()、DispDir()、DispFile()的程序代碼如下:
(6)項(xiàng)目的保存與運(yùn)行。代碼輸入完成后,先將項(xiàng)目保存,然后按F5鍵或單擊工具欄上的運(yùn)行按鈕運(yùn)行該項(xiàng)目。項(xiàng)目運(yùn)行后,在左窗格中會(huì)將計(jì)算機(jī)中的邏輯盤符顯示出來,選擇邏輯盤的某個(gè)文件夾,此文件夾下的文件將會(huì)在右窗格中顯示,效果圖如圖5-1所示。
【相關(guān)知識(shí)】
知識(shí)點(diǎn)5-1-1
TreeView控件
TreeView控件又稱為樹型視圖控件,工具箱中的圖標(biāo)為。TreeView控件類似于在Windows資源管理器左窗格中以文件夾和文件的方式顯示節(jié)點(diǎn)的層次結(jié)構(gòu)。每個(gè)節(jié)點(diǎn)都可能包含稱為子節(jié)點(diǎn)的其他節(jié)點(diǎn)。父節(jié)點(diǎn)或包含子節(jié)點(diǎn)的節(jié)點(diǎn)可以以展開或折疊的方式顯示。
1.TreeView控件的主要屬性
1)?Nodes屬性
Nodes屬性是TreeView控件最重要的屬性,它是一個(gè)集合屬性,Nodes集合包含分配給TreeView控件的所有TreeNode對象。此集合中的樹節(jié)點(diǎn)稱做根樹節(jié)點(diǎn)。隨后添加到根樹節(jié)點(diǎn)上的任何樹節(jié)點(diǎn)稱做子節(jié)點(diǎn)。
可以在圖5-4所示的“樹節(jié)點(diǎn)編輯器”中向TreeView控件添加根節(jié)點(diǎn)和子節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)的名稱都可以通過“標(biāo)簽”設(shè)置,各節(jié)點(diǎn)折疊時(shí)的圖像可以在“圖像”下拉列表框中設(shè)置,各節(jié)點(diǎn)展開時(shí)的圖像可以在“選定的圖像”下拉列表框中設(shè)置。Nodes屬性可以通過在圖5-4中添加節(jié)點(diǎn)并設(shè)置各節(jié)點(diǎn)的屬性來設(shè)置,也可以用編程的方式來設(shè)置。例如,案例5-1就是用編程方式來設(shè)置的。Nodes集合屬性如圖5-10所示。Nodes集合屬性的功能說明如表5-2所示。圖5-10Nodes集合屬性
Nodes屬性是集合屬性,即當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)Nodes屬性如表5-2所示。
2)?SelectedNode屬性
SelectedNode屬性用來設(shè)置或返回當(dāng)前被選中的節(jié)點(diǎn),它也是一個(gè)集合屬性,它的集合屬性的子屬性和方法與Nodes集合屬性的子屬性和方法基本相同。
3)?ImageList屬性(必須使TreeView控件與ImageList控件相關(guān)聯(lián))
TreeView控件可在每個(gè)節(jié)點(diǎn)旁顯示圖標(biāo),圖標(biāo)緊挨著節(jié)點(diǎn)文本的左側(cè)。若要顯示這些圖標(biāo),則必須使TreeView控件與ImageList控件相關(guān)聯(lián)。關(guān)聯(lián)的方法為:既可以用手工方式在設(shè)計(jì)器中使用“屬性”窗口設(shè)置,也可以用編程的方式實(shí)現(xiàn)。采用編程的方式可將TreeView控件的ImageList屬性設(shè)置為希望使用的ImageList控件,其代碼如下:
TreeView1.ImageList=ImageList1
(1)?ImageIndex屬性。只有設(shè)置TreeView控件的ImageList屬性與ImageList控件相關(guān)聯(lián)后,才能設(shè)置ImageIndex屬性。
ImageIndex屬性可為TreeView控件中的節(jié)點(diǎn)設(shè)置默認(rèn)圖像,還可為正常和展開狀態(tài)下的節(jié)點(diǎn)顯示圖像。節(jié)點(diǎn)旁邊顯示圖像由ImageIndex屬性值從TreeView控件的ImageList屬性中名為ImageList的控件來獲取。
(2)?SelectedImageIndex屬性。SelectedImageIndex屬性可為選定狀態(tài)下的節(jié)點(diǎn)顯示圖像。選定狀態(tài)下節(jié)點(diǎn)旁邊顯示的圖像由SelectedImageIndex屬性值從TreeView控件的ImageList屬性中名為ImageList的控件來獲取。
ImageIndex屬性和SelectedImageIndex屬性可在代碼中設(shè)置,也可在“樹節(jié)點(diǎn)編輯器”中設(shè)置,如圖5-4所示。
4)?CheckBoxes屬性
TreeView控件的CheckBoxes屬性的功能可以決定是否在節(jié)點(diǎn)旁顯示復(fù)選框。當(dāng)該屬性設(shè)置為True,在顯示樹視圖時(shí),節(jié)點(diǎn)旁邊帶有復(fù)選框,此時(shí),用戶可以通過單擊鼠標(biāo)選中或取消節(jié)點(diǎn)旁的復(fù)選框來決定節(jié)點(diǎn)是顯示或清除。當(dāng)然用戶也可以通過編程的方式在程序中將節(jié)點(diǎn)的Checked屬性設(shè)置為True或False來決定節(jié)點(diǎn)是顯示還是清除。
5)?Indent屬性
Indent屬性用來設(shè)置父節(jié)點(diǎn)與子節(jié)點(diǎn)之間的水平縮進(jìn)距離。
6)?LabelEdit屬性
LabelEdit屬性用來設(shè)置是否可以編輯節(jié)點(diǎn)的標(biāo)簽文本。
7)?PathSeparator屬性
PathSeparator屬性用來獲取或設(shè)置節(jié)點(diǎn)路徑所使用的分隔符串,缺省的分隔符為“\”。
8)?Scrollable屬性
Scrollable屬性用來獲取或設(shè)置當(dāng)TreeView控件中的節(jié)點(diǎn)超出邊界時(shí)是否添加滾動(dòng)條,缺省值為True。
9)?Sorted屬性
Sorted屬性用來獲取或設(shè)置是否將TreeView控件中的節(jié)點(diǎn)按字母順序排序。
10)?VisibleCount屬性
VisibleCount屬性用于返回TreeView控件中完全可見的樹節(jié)點(diǎn)的數(shù)目,該屬性是一個(gè)只讀屬性。
11)?HotTracking屬性
HotTracking屬性用于返回或設(shè)置當(dāng)鼠標(biāo)指針移過樹節(jié)點(diǎn)標(biāo)簽時(shí),樹節(jié)點(diǎn)標(biāo)簽是否具有超級鏈接的外觀。
12)?ShowLines屬性
ShowLines屬性用于返回或設(shè)置是否顯示TreeView控件的父子節(jié)點(diǎn)之間的關(guān)系線,缺省值為True。
13)?ShowPlusMinus屬性
ShowPlusMinus屬性用于返回或設(shè)置是否在包含有子節(jié)點(diǎn)的父節(jié)點(diǎn)前顯示加號(hào)(+)和減號(hào)(-)按鈕,缺省值為True。加號(hào)(+)表示該項(xiàng)目沒有展開,單擊加號(hào)(+)可以展開項(xiàng)目,此時(shí)顯示減號(hào)(-),單擊減號(hào)(-)將折疊該項(xiàng)目,減號(hào)(-)又變成加號(hào)(+)。
14)?ShowRootLines屬性
ShowRootLines屬性用于返回或設(shè)置是否顯示TreeView控件根節(jié)點(diǎn)之間的連線,缺省值為True。
ShowLines屬性、ShowPlusMinus屬性和ShowRootLines屬性最好保留它們的缺省屬性值,因?yàn)檫@三個(gè)屬性值都為True時(shí),父節(jié)點(diǎn)和子節(jié)點(diǎn)的樹狀結(jié)構(gòu)關(guān)系才會(huì)顯示得清晰明了。
2.TreeView控件的常用事件
1)?BeforeSelect事件和AfterSelect事件
這兩個(gè)事件在選中節(jié)點(diǎn)“前”、“后”觸發(fā)。AfterSelect事件是在設(shè)計(jì)器上雙擊TreeView控件默認(rèn)打開的事件,也是最常用的事件,例如,案例5-1使用了TreeView控件的AfterSelect事件。
2)?BeforeCollapse事件和AfterCollapse事件
這兩個(gè)事件在節(jié)點(diǎn)折疊“前”、“后”觸發(fā)。當(dāng)子節(jié)點(diǎn)展開時(shí),單擊父節(jié)點(diǎn)使子節(jié)點(diǎn)收斂“前”、“后”分別觸發(fā)BeforeCollapse事件和AfterCollapse事件。
3)?BeforeExpand事件和AfterExpand事件
這兩個(gè)事件與BeforeCollapse事件和AfterCollapse事件剛好相反,BeforeExpand事件和AfterExpand事件分別在節(jié)點(diǎn)展開“前”、“后”觸發(fā)。
4)?AfterLabelEdit事件和BeforeLabelEdit事件
這兩個(gè)事件在編輯節(jié)點(diǎn)的標(biāo)簽文本“前”、“后”觸發(fā)。
5)?BeforeSelect事件和AfterSelect事件
這兩個(gè)事件在選定節(jié)點(diǎn)“前”、“后”觸發(fā)。
6)?BeforeCheck事件和AfterCheck事件
當(dāng)TreeView控件的CheckBoxes屬性設(shè)置為True時(shí),這兩個(gè)事件在選中節(jié)點(diǎn)前的復(fù)選框“前”、“后”觸發(fā)。
3.TreeView控件的常用方法
1)?CollapseAll方法
CollapseAll方法可以將所有TreeView控件中展開的節(jié)點(diǎn)折疊起來。
調(diào)用的格式為
TreeView1.CollapseAll()
2)?ExpandAll方法
ExpandAll方法可以將所有TreeView控件中折疊的節(jié)點(diǎn)都展開。
調(diào)用的格式為
TreeView1.ExpandAll()
3)?GetNodeAt方法
GetNodeAt方法可以檢索位于指定位置的節(jié)點(diǎn)。
調(diào)用的格式為
TreeView1.GetNodeAt(xAsinteger,yAsinteger)
4)?GetNodeCount方法
GetNodeCount方法可以返回TreeView控件的節(jié)點(diǎn)數(shù),返回TreeView控件的節(jié)點(diǎn)數(shù)根據(jù)調(diào)用此方法時(shí)傳遞的邏輯參數(shù)值的不同而不同。如果調(diào)用此方法時(shí)傳遞的邏輯參數(shù)值為True,則返回的節(jié)點(diǎn)數(shù)是包括子節(jié)點(diǎn)的;如果調(diào)用此方法時(shí)傳遞的邏輯參數(shù)值為False,則返回的節(jié)點(diǎn)數(shù)是不包括子節(jié)點(diǎn)的。
調(diào)用的格式為
TreeView1.GetNodeCount(IncludeSubtreesAsBollean)知識(shí)點(diǎn)5-1-2
ListView控件
ListView控件又稱為列表視圖控件,工具箱中的圖標(biāo)為。ListView控件可以把所需列出的項(xiàng)目很清楚地羅列出來,如列出邏輯盤上某文件夾下的文件、數(shù)據(jù)庫中的表名或表中某些字段的記錄值等。
1.ListView控件的主要屬性
1)?View屬性
列表有“大圖標(biāo)”、“詳細(xì)資料”、“小圖標(biāo)”和“列表”四種方式。用戶要選擇四種方式的一種來顯示列表項(xiàng),可以通過對ListView控件的View屬性進(jìn)行設(shè)置。ListView控件的View屬性設(shè)置方法如圖5-11所示。
LargeIcon是大圖標(biāo)顯示方式(默認(rèn)值),Details是詳細(xì)列表顯示方式,SmallIcon是小圖標(biāo)顯示方式,List是列表顯示方式。圖5-11ListView控件的View屬性設(shè)置方法
2)?LargeImageList屬性
LargeImageList屬性用來設(shè)置ListView控件的列表項(xiàng)的圖標(biāo)。實(shí)際上其值可以用來指定某個(gè)ImageList控件。當(dāng)ListView控件的列表項(xiàng)以大圖標(biāo)顯示時(shí),設(shè)置此屬性。
3)?SmallImageList屬性
SmallImageList屬性用來設(shè)置ListView控件的列表項(xiàng)的圖標(biāo)。實(shí)際上其值可以用來指定某個(gè)ImageList控件。當(dāng)ListView控件的列表項(xiàng)以小圖標(biāo)顯示時(shí),設(shè)置此屬性。
4)?StateImageList屬性
StateImageList屬性用來設(shè)置ListView控件的列表項(xiàng)的圖標(biāo)。實(shí)際上其值可以用來指定某個(gè)ImageList控件。當(dāng)ListView控件的列表項(xiàng)以除大圖標(biāo)和小圖標(biāo)外的形式顯示時(shí),設(shè)置此屬性。
5)?LabelEdit屬性
LabelEdit屬性用于返回或設(shè)置是否允許對列表項(xiàng)目標(biāo)題進(jìn)行編輯。
6)?MultiSelect屬性
MultiSelect屬性用來設(shè)置是否可以進(jìn)行多項(xiàng)選擇,默認(rèn)值為True。
7)?GridLines屬性
GridLines屬性用來設(shè)置是否將列表項(xiàng)顯示為表格形式,默認(rèn)值為False。
8)?HeaderStyle屬性
HeaderStyle屬性用來設(shè)置表頭風(fēng)格,默認(rèn)值為Clickable,表示可以響應(yīng)鼠標(biāo)單擊并可按該列表內(nèi)容對項(xiàng)目排序;None表示不顯示表頭;NoneClickable表示不響應(yīng)鼠標(biāo)單擊。
9)?Sorted屬性
Sorted屬性用來設(shè)置ListView控件的列表項(xiàng)的排序方式,默認(rèn)值為None,表示不設(shè)置排序;Ascending表示按開頭字母升序排列;Descending則表示按開頭字母降序排列。
10)?FocusedItem屬性
FocusedItem屬性用于返回當(dāng)前獲取焦點(diǎn)的列表項(xiàng)。
11)?Columns集合屬性
Columns集合屬性用來設(shè)置ListView控件的列表頭,只有當(dāng)ListView控件的View屬性設(shè)置為Details時(shí)才會(huì)顯示ListView控件的列表頭。用戶可以單擊屬性窗口中Columns屬性右邊的按鈕,通過圖5-9所示的“ColumnHeader集合編輯器”向ListView控件中添加列表頭。
Columns集合屬性主要用于設(shè)置列表項(xiàng)的屬性。列表頭項(xiàng)的常用屬性如表5-3所示。
表5-3列表頭項(xiàng)的常用屬性
12)?Items集合屬性
Items集合屬性用來設(shè)置ListView控件的列表項(xiàng)信息,用戶可以單擊屬性窗口中Items屬性右邊的按鈕,通過操作圖5-12所示的“ListViewItem集合編輯器”向ListView控件中添加列表項(xiàng)。
在圖5-12所示的“ListViewItem集合編輯器”中有成員屬性SubItems。當(dāng)單擊該屬性右邊的按鈕時(shí),會(huì)出現(xiàn)圖5-13所示的“ListViewSubItem集合編輯器”,可以向ListView控件中添加次列表項(xiàng)SubItem。圖5-12ListViewItem集合編輯器
在出現(xiàn)圖5-12所示的“ListViewSubItem集合編輯器”時(shí),左邊索引號(hào)為0的項(xiàng)是自動(dòng)產(chǎn)生的,這項(xiàng)為該SubItem的主項(xiàng)。
用戶也可以在程序代碼中利用Items集合屬性的Add和Clear方法向Items集合里動(dòng)態(tài)添加和刪除列表項(xiàng)。圖5-13ListViewSubItem集合編輯器
2.ListView控件的常用事件
ListView控件的常用事件如表5-4所示。
3.ListView控件的常用方法
1)?Clear方法
Clear方法為從ListView控件中移除所有項(xiàng)和列。
2)?GetItemAt方法
GetItemAt方法可以檢索位于指定位置的項(xiàng)。
調(diào)用的格式為
ListView.GetNodeAt(xAsinteger,yAsinteger)
知識(shí)點(diǎn)5-1-3
System.IO命名空間
System.IO命名空間包含與I/O相關(guān)的類,它提供了基于對象的工具。System.IO命名空間提供以下功能:
●創(chuàng)建、刪除和操作文件夾及文件。●對文件夾及文件進(jìn)行監(jiān)視。
●從流中讀/寫數(shù)據(jù)或字符(包括多字節(jié)字符,并可以直接讀/寫各種數(shù)據(jù)類型)。
●隨機(jī)訪問文件。
●使用多種枚舉常量設(shè)置文件夾和文件的操作等。
在使用與I/O操作有關(guān)的類時(shí),必須引用System.IO命名空間。引用System.IO命名空間的方法是在程序代碼的最開頭加上如下語句:
ImportsSystem.IO知識(shí)點(diǎn)5-1-4Directory類
Directory類的典型操作是復(fù)制、移動(dòng)、重命名、創(chuàng)建和刪除文件夾,也可將Directory類用于獲取和設(shè)置與文件夾的創(chuàng)建、訪問及寫入操作相關(guān)的DateTime信息。表5-5列出了Directory類的常用方法。
5.2文件訪問技術(shù)
【案例5-2】
類似Windows資源管理器功能的窗體(2)。對顯示在ListView控件內(nèi)的文件進(jìn)行復(fù)制、粘貼、刪除等操作。
該案例可以對顯示在ListView控件內(nèi)的文件進(jìn)行復(fù)制、粘貼、刪除等操作。當(dāng)首次在ListView控件的空白處右擊鼠標(biāo)時(shí),彈出的菜單都是灰色的;在某個(gè)文件上右擊鼠標(biāo)時(shí),彈出的菜單只顯示復(fù)制文件和刪除文件菜單;如果單擊顯示復(fù)制文件菜單后,再右擊鼠標(biāo),則會(huì)出現(xiàn)粘貼文件菜單。該案例還可以實(shí)現(xiàn):在ListView控件中顯示的文件上雙擊文本文件,則會(huì)在RichTextBox1控件中顯示該文本文件的內(nèi)容;如果雙擊的文件不是文本文件,則會(huì)在RichTextBox1控件中顯示該文件的擴(kuò)展名類型信息。效果圖如圖5-14所示。圖5-14案例5-2的效果圖
【技能目標(biāo)】
學(xué)會(huì)利用文件流對文件進(jìn)行讀/寫操作。
【操作要點(diǎn)與步驟】
(1)將案例5-1所在的文件夾VBnet5-1復(fù)制到文件夾VBnet5-2,打開VBnet5-2文件夾下的VBnet5-1.sln文件。
(2)單擊“解決方案資源管理器”窗口中的“解決方案‘VBet5-1’(1項(xiàng)目)”,將名稱由原來的VBnet5-1改為VBnet5-2。
(3)單擊“解決方案資源管理器”窗口中的“VBnet5-1”項(xiàng)目,將屬性窗口中的“項(xiàng)目文件”屬性改為VBnet5-2.vbproj。
(4)彈出式菜單設(shè)計(jì)。將工具箱中的彈出式菜單控件拖放到窗體內(nèi),由于彈出式菜單控件在項(xiàng)目運(yùn)行時(shí)不可見,因此該控件自動(dòng)被放在窗體的下方顯示。拖放好上下文菜單控件后按表5-6設(shè)置彈出式菜單中各菜單項(xiàng)的屬性。
(5)將ListView1控件的ContextMenu屬性設(shè)置為ContextMenu1。
(6)編寫代碼。因?yàn)樵摪咐蟾鶕?jù)是否在ListView1控件的空白處右擊鼠標(biāo)來決定上下文菜單的可操作項(xiàng),所以編寫事件代碼如下:
(7)為上下文菜單編寫的各菜單項(xiàng)的Click事件代碼如下:
(8)為了實(shí)現(xiàn)在ListView1控件中雙擊文本文件名時(shí)能在RichTextBox1控件內(nèi)顯示文本文件的內(nèi)容(如果雙擊的不是文本文件,則顯示該文件的擴(kuò)展名信息),編寫程序代碼如下:
(9)項(xiàng)目的保存與運(yùn)行。代碼輸入完成,先保存項(xiàng)目,然后按F5鍵或單擊工具欄上的運(yùn)行按鈕運(yùn)行該項(xiàng)目。項(xiàng)目運(yùn)行后會(huì)出現(xiàn)如圖5-14所示的效果圖。
【相關(guān)知識(shí)】
知識(shí)點(diǎn)5-2-1
File類
文件是存儲(chǔ)在媒體介質(zhì)上的數(shù)據(jù)集合。文件類可以實(shí)現(xiàn)創(chuàng)建文件、復(fù)制文件、刪除文件、移動(dòng)文件等任務(wù)。File類知識(shí)點(diǎn)5-2-1System.IO命名空間包含F(xiàn)ile和Directory類,它們可以提供操縱文件和文件夾所需的基本功能。File類的常用方法如表5-7所示。
知識(shí)點(diǎn)5-2-2文件類型
VB.NET與VB一樣,也有三種文件類型,這三種文件類型分別是:順序文件、隨機(jī)文件和二進(jìn)制文件。
1.順序文件
順序文件也稱為文本字符流式文件,它是普通的純文本文件,通常用于存儲(chǔ)字符、數(shù)字或其他可用的ASCII字符表示的數(shù)據(jù),但不能存儲(chǔ)像位圖這樣的信息。該文件中的每一個(gè)字符都是由一個(gè)文本字符或文件格式字符(回車、換行等)組成的。
2.隨機(jī)文件
隨機(jī)文件允許以記錄的方式存儲(chǔ)和訪問信息,這種方法的隨機(jī)文件由一組相同長度的記錄組成,記錄可以由標(biāo)準(zhǔn)數(shù)據(jù)類型的單一字段組成,或者由多個(gè)字段組成(如班級的課程由多門課程所組成)。每個(gè)字段的數(shù)據(jù)類型和長度可以不同,但文件中每條記錄的長度是相同的。隨機(jī)訪問類型允許訪問隨機(jī)文件的任何記錄。
3.二進(jìn)制文件
二進(jìn)制文件適用于訪問具有任意結(jié)構(gòu)的文件,因此它也是一種最通用的訪問類型。它實(shí)際上以字節(jié)為單位對文件進(jìn)行訪問,不管什么文件都可以認(rèn)為是由字節(jié)構(gòu)成的。因?yàn)樵谠L問二進(jìn)制文件類型時(shí)可以將文件指針移到任何位置,所以它對于變長字段尤為適用。知識(shí)點(diǎn)5-2-3StreamReader類和StreamWriter類
1.流的概念
在VB.NET中引入了一種新的數(shù)據(jù)格式——流,這種格式也可以通過System.IO命名空間下的類來訪問。流使用Stream類表示,所有表示流的類都是從這個(gè)類中繼承的。流向用戶提供了一個(gè)一般的數(shù)據(jù)視圖,隱藏了操作系統(tǒng)和底層設(shè)備的實(shí)現(xiàn)細(xì)節(jié),所有的流都支持讀/寫操作。打開文件時(shí)將返回對應(yīng)的流對象,用戶便可以對流對象進(jìn)行讀/寫操作。
2.StreamReader類和StreamWriter類
System.IO提供了通過使用特定編碼從流或文件中讀取字符和將字符寫入流或文件中的類。System.IO包括StreamReader類和StreamWriter類,這一對類可以直接從文件中讀取字符順序流或?qū)⒆址樞蛄鲗懭氲轿募校鼈兪且晕谋痉绞阶x取和寫入信息的。
StreamReader類可以從流或文件中讀取字符;在創(chuàng)建StreamReader類的對象時(shí),可以指定一個(gè)流對象,也可以指定一個(gè)文件路徑,創(chuàng)建對象之后就可以調(diào)用它的方法,從流中讀取數(shù)據(jù)。StreamReader類提供了以下從流中讀取數(shù)據(jù)的常用方法,如表5-8所示。
StreamWriter類可以將字符寫入流或文件。StreamWriter類提供了以下常用的方法將字符寫入流或文件中,如表5-9所示。
StreamReader類和StreamWriter類的默認(rèn)編碼均為UTF-8,而不是當(dāng)前系統(tǒng)的ANSI編碼。UTF-8可以正確處理Unicode字符,因此如果用StreamReader類和StreamWriter類讀/寫的文件流不是默認(rèn)編碼為UTF-8的文本文件,則應(yīng)該將該文本文件另存為編碼為UTF-8的文本文件,另存為的界面如圖5-15所示。圖5-15另存為編碼為UTF-8的文本文件
StreamReader類和StreamWriter類都有Close方法,Close方法都可以關(guān)閉該對象,并釋放相關(guān)聯(lián)的系統(tǒng)資源。
5.3對?話?框?控?件
【案例5-3】
類似Windows資源管理器功能的窗體(3)。利用對話框控件實(shí)現(xiàn)文件的打開等操作。
該案例通過操作加載在窗體上的下拉式菜單實(shí)現(xiàn)用對話框?qū)⑽募蜷_,將打開的文件在RichTextBox1控件內(nèi)顯示,然后對顯示在RichTextBox1控件內(nèi)的文字內(nèi)容用字體對話框和顏色對話框?qū)ζ溥M(jìn)行字體和顏色的設(shè)置等。所有的操作狀態(tài)均在狀態(tài)欄上顯示。效果圖如圖5-16~圖5-20所示。圖5-16案例5-3的效果圖(使用對話框控件)通過單擊圖5-16中文件菜單中的“打開”、“保存”及格式菜單下的“顏色”、“字體”菜單項(xiàng)分別會(huì)顯示如圖5-17~圖5-20所示的對話框。圖5-17“打開”對話框圖5-18“另存為”對話框圖5-19“顏色”對話框圖5-20“字體”對話框
【技能目標(biāo)】
(1)復(fù)習(xí)下拉式菜單。
(2)會(huì)使用對話框控件生成各種常規(guī)對話框。
【操作要點(diǎn)與步驟】
(1)將案例5-2所在的文件夾VBnet5-2復(fù)制到文件夾VBnet5-3,并打開VBnet5-3文件夾下的VBnet5-2.sln文件。
(2)單擊“解決方案資源管理器”窗口中的“解決方案‘VBnet5-2’(1項(xiàng)目)”,將名稱由原來的VBnet5-2改為VBnet5-3。
(3)單擊“解決方案資源管理器”窗口中的“VBnet5-2”項(xiàng)目,將屬性窗口中的“項(xiàng)目文件”屬性改為“VBnet5-3.vbproj”。
(4)下拉式菜單設(shè)計(jì)。將工具箱中的下拉式菜單控件拖放到窗體內(nèi),由于下拉式菜單控件在項(xiàng)目運(yùn)行時(shí)不可見,因此該控件自動(dòng)被放在窗體的下方顯示。拖放好下拉式菜單控件后按表5-10設(shè)置下拉式菜單中各菜單項(xiàng)的屬性。
(5)將窗體FrmExplorer控件的Menu屬性設(shè)置為MainMenu1。
(6)完成以上五步后,開始編寫程序代碼。為了在程序運(yùn)行時(shí)能在RichTextBox1控件中顯示案例的功能及操作方法,并在狀態(tài)欄顯示初始狀態(tài),編寫了Form1_Load事件代碼。在用戶單擊關(guān)閉窗體或單擊“結(jié)束”菜單時(shí),由于RichTextBox1_TextChanged事件中邏輯變量bModify的值為True時(shí),會(huì)提示用戶是否保存RichTextBox1控件中的文本到文件中,因此在結(jié)束程序中編寫了Form1_Closed和MnEnd_Click兩個(gè)事件,在這兩個(gè)事件中調(diào)用了EndProgram()函數(shù)。程序的開始與結(jié)束代碼如下:
(7)完成以上六步后,開始為下拉式菜單各菜單項(xiàng)的Click事件編寫代碼。首先編寫文件菜單所對應(yīng)的菜單項(xiàng)的Click事件代碼,通過對話框的操作可以將打開的文本文件在RichTextBox1控件中顯示,并能對控件中的內(nèi)容進(jìn)行字處理(打開、保存、字體、顏色等)。代碼如下:
(8)為編輯菜單所對應(yīng)的菜單項(xiàng)的Click事件編寫代碼。通過操作編輯菜單的各菜單項(xiàng),對RichTextBox1控件中顯示的信息進(jìn)行撤消、剪切、復(fù)制、粘貼、刪除和全選等操作。
(9)最后,為格式菜單所對應(yīng)的菜單項(xiàng)的Click事件編寫代碼,通過操作格式菜單的各菜單項(xiàng),實(shí)現(xiàn)對在RichTextBox1控件中顯示的信息進(jìn)行字體和顏色等的設(shè)置,為此分別編寫了兩個(gè)函數(shù)SetFont()和SetColor()。
(10)項(xiàng)目的保存與運(yùn)行。代碼輸入完成后,先保存項(xiàng)目,然后按F5鍵或單擊工具欄上的運(yùn)行按鈕運(yùn)行該項(xiàng)目。項(xiàng)目運(yùn)行后,單擊下拉式菜單的各菜單項(xiàng)將出現(xiàn)如圖5-17~圖5-20所示的效果圖。
【相關(guān)知識(shí)】
知識(shí)點(diǎn)5-3-1對話框控件概述
在VB.NET中,設(shè)計(jì)打開文件對話框,設(shè)置字體顏色對話框以及打印文件對話框是一件非常輕松的事情。使用VB.NET設(shè)計(jì)對話框基本分三步:彈出(ShowDialog方法)、判斷返回值(看ShowDialog方法的返回值是什么)以及取數(shù)據(jù)(FileName屬性或其他屬性)。所以學(xué)會(huì)了“打開文件”對話框的用法以后,學(xué)習(xí)其他對話框就非常容易了。
在VB.NET中,對話框控件有打開文件、保存文件、顏色設(shè)置、字體設(shè)置、打印、打印預(yù)覽等對話框。這些對話框控件都是不可視控件,在窗體設(shè)計(jì)器上并不直接添加到窗體上,而是放在窗體工作區(qū)的下方。知識(shí)點(diǎn)5-3-2文件打開對話框控件OpenFileDialog
在Windows應(yīng)用程序中,需要通過文件來操作數(shù)據(jù)。要操作文件中的數(shù)據(jù),必須先打開文件。VB.NET提供了文件打開對話框OpenFileDialog控件,程序通過調(diào)用該控件的ShowDialog方法即可顯示如圖5-17所示的“打開”文件對話框,用戶通過指定驅(qū)動(dòng)器、文件夾名稱、文件名來指定文件。打開指定的文件后,用戶就可以讀/寫打開文件中的數(shù)據(jù)了。
文件打開對話框控件OpenFileDialog的屬性如表5-11所示。文件打開對話框控件OpenFileDialog的常用方法如表5-12所示。
有一個(gè)StreamReader類可用來讀取文件。在創(chuàng)建了StreamReader類以后,就可以用StreamReader類的方法對文本文件進(jìn)行操作了。StreamReader類的常用方法有以下幾種。
●?Read方法:讀取輸入流中的下一個(gè)字符或下一組字符。
●?ReadToEnd方法:從流的當(dāng)前位置到末尾讀取流。
●?Peek方法:返回下一個(gè)可用的字符,但不使用它。
●?ReadLine方法:從當(dāng)前流中取一行字符并將數(shù)據(jù)作為字符串返回。知識(shí)點(diǎn)5-3-3文件保存對話框控件SaveFileDialog
在VB.NET中,要為應(yīng)用程序設(shè)置文件保存對話框,應(yīng)使用SaveFileDialog控件。該控件的使用和設(shè)置與OpenFileDialog控件的使用和設(shè)置基本相同,只是多了一些文件保存對話框控件SaveFileDialog的特有屬性。
表5-13列出了除OpenFileDialog控件的屬性外,文件保存對話框控件SaveFileDialog的特有屬性。
SaveFileDialog控件的方法與OpenFileDialog控件完全相同,可按照處理OpenFileDialog控件的方法來處理SaveFileDialog控件。例如要顯示一個(gè)SaveFileDialog控件,可使用下面的代碼:
SaveFileDialog1.ShowDialog()
圖5-18所示為一個(gè)標(biāo)題為“另存為”的文件保存對話框,該對話框的默認(rèn)路徑為“D:\”,默認(rèn)文件名為“未命名”,默認(rèn)文件擴(kuò)展名為“*.txt”。
有一個(gè)StreamWriter類可用來寫文件。在創(chuàng)建了StreamWriter類以后,就可以用StreamWriter類的方法對文本文件進(jìn)行操作了。StreamWriter類的常用方法有以下幾種:
●?Write方法:寫入?yún)?shù)指定的字符串、數(shù)字、字符數(shù)組等。
●?Close方法:關(guān)閉當(dāng)前的StreamWriter類的對象。
●?WriteLine方法:換行寫入?yún)?shù)指定的字符串、數(shù)字、字符數(shù)組等。如果沒有參數(shù),則只能完成換行功能。知識(shí)點(diǎn)5-3-4顏色設(shè)置對話框控件ColorDialog
在VB.NET中,如果要進(jìn)行顏色設(shè)置,則可以使用顏色設(shè)置對話框控件ColorDialog。通過調(diào)用ColorDialog控件的ShowDialog方法,可以顯示“顏色”對話框,如圖5-19所示。這是一個(gè)標(biāo)準(zhǔn)的Windows顏色設(shè)置對話框,它支持幾百萬種顏色,但用戶能夠直接使用的顏色只有幾十個(gè),其他的顏色需要用戶單擊“規(guī)定自定義顏色”按鈕,打開對話框的自定義部分來定義。
相對于其他的對話框控件,ColorDialog控件的屬性比較少,這是因?yàn)闃?biāo)準(zhǔn)的“顏色”對話框不需要進(jìn)行過多的設(shè)置。表5-14列出了顏色設(shè)置對話框控件ColorDialog的常用屬性及說明。
ColorDialog控件只有兩種方法:一種是Reset方法,用于還原對話框的默認(rèn)設(shè)置;另一種是ShowDialog方法,用于顯示“顏色”對話框。
知識(shí)點(diǎn)5-3-5字體對話框控件FontDialog
在VB.NET應(yīng)用程序中,字體設(shè)置是通過FontDialog控件調(diào)用一個(gè)名稱為“字體”的字體設(shè)置對話框來實(shí)現(xiàn)的。字體設(shè)置是大部分應(yīng)用程序,特別是具有文本編輯能力的應(yīng)用程序的必備功能。通過調(diào)用字體對話框控件FontDialog1的ShowDialog方法可以顯示“字體”對話框,如圖5-20所示。利用“字體”對話框,用戶可以完成所有關(guān)于字體的設(shè)置。
字體對話框控件FontDialog的常用屬性及說明如表5-15所示。
FontDialog控件的常用方法有ShowDialog和Reset兩種,它們的使用同其他幾個(gè)對話框控件相同。
知識(shí)點(diǎn)5-3-6打印對話框控件PrintDialog和打印預(yù)覽對話框控件PrintPreviewDialog
前面介紹了案例5-3中所用到的打開文件、保存文件、顏色設(shè)置以及字體設(shè)置對話框,在實(shí)際應(yīng)用系統(tǒng)中,除了經(jīng)常使用前面介紹的幾種通用對話框外,還經(jīng)常使用VB.NET提供的“打印”和“打印預(yù)覽”兩個(gè)對話框。另外,還需要PrintDocument控件來真正執(zhí)行打印任務(wù)。
在窗體的下方創(chuàng)建PrintDialog控件之后,調(diào)用該控件的ShowDialog方法即可顯示“打印”對話框,如圖5-21所示。圖5-21“打印”對話框在“打印”對話框中,用戶可以在打印之前設(shè)置打印的份數(shù),選擇已安裝的打印機(jī)類型,設(shè)置打印范圍等打印選項(xiàng),操作方法和其他對話框一樣。PrintDialog控件除了具有和其他對話框相同的屬性外,該控件還有自己的特有屬性,如表5-16所示。
如果用戶要在打印之前預(yù)覽自己的文檔,那么可在應(yīng)用程序中添加一個(gè)PrintPreviewDialog控件,然后調(diào)用該控件的ShowDialog方法顯示“打印預(yù)覽”對話框來預(yù)覽打印文檔。對于PrintPreviewDialog控件來說,最重要的屬性就是Document屬性,Document屬性用來設(shè)置接收打印設(shè)備的打印文檔,該屬性的值由PrintDocument控件提供。實(shí)際上,文檔的打印和打印預(yù)覽都必須由PrintDocument控件和類來支持,它可以提供打印文檔并發(fā)送打印命令到打印機(jī),也就是說,從文檔到打印機(jī)的打印任務(wù)是由PrintDocument類來完成的。在創(chuàng)建PrintDialog和PrintPreviewDialog控件之前,應(yīng)利用工具箱創(chuàng)建一個(gè)PrintDocument控件,然后設(shè)置其DocumentName屬性值為要打印文檔的名稱和路徑。
PrintDocument類也有一個(gè)PrinterSettings屬性,用來接收或設(shè)置文檔的打印機(jī)對象,一般從PrintDialog控件的PrinterSettings中獲得。PrintDocument類通過Print方法將文檔發(fā)送到指定的打印機(jī)進(jìn)行打印。在文檔打印時(shí),會(huì)為文檔的每一頁觸發(fā)PrintPage事件,這要求用戶為PrintPage事件創(chuàng)建一個(gè)過程并添加一個(gè)事件處理器。新建的過程可以根據(jù)StreamReader類的屬性來讀取文檔內(nèi)容并發(fā)送到打印機(jī)。知識(shí)點(diǎn)5-3-7標(biāo)準(zhǔn)的消息和輸入對話框
在VB.NET中,還提供了MsgBox函數(shù)、MessageBox類和InputBox函數(shù),用于生成標(biāo)準(zhǔn)的消息和輸入對話框。VB.NET中標(biāo)準(zhǔn)的消息和輸入對話框的功能與VB中標(biāo)準(zhǔn)的消息和輸入對話框功能相似。習(xí)題
一、單項(xiàng)選擇
1.要執(zhí)行與I/O有關(guān)的操作,必須引入_____命名空間。
A.?System.Forms
B.?System.Draw
C.?System.IO
D.?System.Math
2.一般來說,在制作Windows資源管理器時(shí),其右側(cè)的資源項(xiàng)目
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版無人駕駛汽車測試協(xié)議
- 二零二四年度LED路燈購銷合同協(xié)議書3篇
- 二零二五年度餐飲行業(yè)營銷推廣服務(wù)合同3篇
- 2024版履約擔(dān)保公司履約擔(dān)保管理系統(tǒng)
- 2025年生態(tài)小區(qū)綠化水資源利用承包合同3篇
- 建筑碗扣支架出租合同(2025版)3篇
- 2024路演合同范本:路演活動(dòng)應(yīng)急預(yù)案合同3篇
- 二零二五年度環(huán)??萍妓幚砑夹g(shù)與應(yīng)用合同3篇
- 二零二五版防盜門品牌加盟與區(qū)域經(jīng)營合同3篇
- 2025年度旅游度假村麻石景觀設(shè)計(jì)與施工合同4篇
- 《庖丁解?!帆@獎(jiǎng)?wù)n件(省級公開課一等獎(jiǎng))-完美版PPT
- 化工園區(qū)危險(xiǎn)品運(yùn)輸車輛停車場建設(shè)標(biāo)準(zhǔn)
- 6月大學(xué)英語四級真題(CET4)及答案解析
- 氣排球競賽規(guī)則
- 電梯維修保養(yǎng)報(bào)價(jià)書模板
- 危險(xiǎn)化學(xué)品目錄2023
- FZ/T 81024-2022機(jī)織披風(fēng)
- GB/T 33141-2016鎂鋰合金鑄錠
- JJF 1069-2012 法定計(jì)量檢定機(jī)構(gòu)考核規(guī)范(培訓(xùn)講稿)
- 綜合管廊工程施工技術(shù)概述課件
- 公積金提取單身聲明
評論
0/150
提交評論