ListView 控件可以用來顯示各項帶圖標的列表,也可以用來顯示帶有子項的列表,Windows操作係統的資源管理器中文件夾窗口就是最好的應用例子。如下圖一所示就是“我的電腦”中使用ListView 控件來顯示本機所有盤符:
說明:可以通過“查看”菜單來觀察其它三種顯示方式,這些都是ListView的視圖模式之一。
下麵我們就先來了解下ListView控件的基本應用,在vb.net中的工具箱中,ListView 控件的圖標如下圖二所示:
一、View 屬性
ListView 控件作為一個可以顯示圖標或者子項的列表控件,它最重要的屬性就是 View 屬性,該屬性決定了以哪種視圖模式顯示控件的項,這四種視圖模式分別如下:
1、LartIcon:大圖標視圖模式,在項的文本旁顯示大的圖標,在控件寬度足夠的情況下,項是如圖一中的盤符一樣優先以平行排列的,排列不完的則自動換行顯示在新行中。
2、SmallIcon:小圖標視圖模式,與大圖標模式一樣,但是顯示的是小的圖標。
3、List:列表視圖模式,顯示小圖標,但是項是垂直排列的,隻顯示單列。
4、Details:詳細資料視圖模式,是最豐富的選項,它不但允許您查看項,還允許您查看為各項指定的任何子項。各項在網格中顯示,它們垂直排列且其子項會顯示在列中(帶有列標頭)。對應地,隻有在Details 視圖模式中起作用的控件屬性為:GridLines 和 FullRowSelect,GridLines 屬性指示在包含控件中項及其子項的行和列之間是否顯示網格線。FullRowSelect 屬性指示單擊某項是否選擇其所有子項(即整行選中),如下圖三所示便是GridLines 和 FullRowSelect 屬性都設置為True的情況:
ListView 控件中還有一個HeaderStyle 屬性也是在Details 視圖模式下才起作用,HeaderStyle 屬性指示列標頭樣式,它有下麵三種顯示樣式:
1、Clickable:列標頭的作用類似於按鈕,單擊時可以執行操作(例如排序)。
2、Nonclickable:列標頭不響應鼠標單擊。
3、None:列標頭在報表視圖中不顯示。
二、Items 屬性
此外,ListView 控件最重要的屬性是 Items 屬性,它包含了控件所有的存在的項。SelectedItems 屬性是控件當前選定項的集合,同時和它關聯的 SelectedIndices 屬性是控件中選定項的索引集合,如下示例所示,我們分別在SelectedItems 屬性和SelectedIndices 屬性中獲取所選項索引,窗體上拖放了ListView控件和一個Button 控件,且已經往ListView控件中添加了若幹列和行,代碼如下:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i As Integer = 0
Dim str As String = ""
For i = 0 To ListView1.SelectedItems.Count - 1
str = str & "選中項索引=" & ListView1.SelectedItems.Item(i).Index.ToString & ";"
str = str & "在控件中的索引=" & ListView1.SelectedIndices.Item(i).ToString & vbCr
Next
MessageBox.Show(str)
End Sub
兩個屬性都能獲得所選項在控件中的索引,我們在實際應用的時候可以靈活選擇使用它們中的一個,以達到簡化代碼的目的。
三、ListView 的其他重要屬性
ListView 控件還有一些比較常用的重要屬性
1、Activation 屬性
Activation 屬性指定用戶激活 ListView 控件中的項的方式,它包括三個可選值:
OneClick:用戶必須單擊以激活項。光標更改為手形指針光標,項文本在用戶將鼠標指針移動到項上時更改顏色。
Standard:用戶必須雙擊以激活項。在用戶將鼠標指針移動到項上時沒有提供任何反饋。
TwoClick:用戶必須雙擊以激活項,項文本在用戶將鼠標指針移動到項上時更改顏色。
激活 ListView 中的項與隻選擇項是不同的。當激活某個項時,通常會在 ItemActivate 事件的事件處理程序中執行一個操作。例如,當激活某個項時,您可能會打開一個文件或顯示一個允許用戶對項進行編輯的對話框。通常,項的激活是通過用戶對它進行雙擊來實現的。如果 Activation 屬性設置為 OneClick,那麼單擊該項一次即可將其激活。將 Activation 屬性設置為 TwoClick 與標準的雙擊不同,這是因為兩次單擊之間的時間間隔可以是任意的。
注意 如果將 Activation 屬性設置為 ItemActivation.OneClick 或 ItemActivation.TwoClick,則不管 LabelEdit 屬性的值是什麼,都不允許進行標簽編輯。
設置 Activation 屬性實際上就是決定以何種方式來觸發 ItemActivate 事件,如果我們需要在激活項的時候進行額外的操作,例如彈出一個關聯的對話框來,則可以在 ItemActivate 事件中編寫合適代碼來完成,如下代碼所示:
Private Sub ListView1_ItemActivate(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListView1.ItemActivate
MessageBox.Show("你想做什麼")'可以在這裏添加我們需要的操作
End Sub
代碼運行後,我們激活選項,如下圖五所示:
2、LabelEdit 屬性
LabelEdit 屬性指示用戶是否可以編輯控件中項的標簽。
當 LabelEdit 屬性設置為 true 時,用戶可以單擊項文本,將其選中,然後再次單擊項文本,將標簽文本置於編輯模式,然後,用戶可以修改或替換項的文本標簽。在用戶編輯項文本之前和之後,您可以使用 BeforeLabelEdit 和 AfterLabelEdit 事件來執行任務。如果該屬性設置為 true,則無法修改子項的文本。要更改子項的文本,您可以在用戶雙擊控件中的子項時為其顯示對話框。
3、LabelWrap 屬性
LabelWrap 屬性指示當項作為圖標在控件中顯示時,項標簽是否換行。
當 LabelWrap 屬性設置為 true 時,如果需要,項文本會換至文本的下一行。如果文本長於兩行,則文本將縮短。如果用戶選擇了該項,則顯示所有項文本。如果 LabelWrap 屬性設置為 false,則所有項文本都將顯示在單獨一行中。整個項文本在 LabelWrap 設置為 false 時顯示。隻有在 View 屬性設置為 LargeIcon 或 SmallIcon 時才使用該屬性。
4、MultiSelect 屬性
MultiSelect 屬性指示是否可以選擇多個項。當 MultiSelect 屬性設置為 true 時,可在 ListView 控件中選擇多個項。
5、Scrollable 屬性
Scrollable 屬性指示在沒有足夠空間來顯示所有項時,是否顯示滾動條。
6、Sorting 屬性
Sorting 屬性指示控件中項的排序順序。
Sorting 屬性允許指定項在 ListView 控件中是否排序。默認情況下,不執行排序。當 Sorting 屬性設置為 Ascending 或 Descending 時,ListView 中的項自動按照升序字母順序(當屬性設置為 Ascending 時)或降序字母順序(當屬性設置為 Descending 時)進行排序。您可以使用該屬性對 ListView 控件中顯示的項進行自動排序,使用戶在大量項可用時更容易查找到項。如果您要自己執行對項的排序,而不使用 Sorting 屬性,可與 Sort 方法一起使用 ListViewItemSorter 屬性。
7、LargeImageList 屬性
LargeImageList 屬性設置當項以大圖標在控件中顯示時使用的 ImageList。
8、SmallImageList 屬性
SmallImageList 屬性設置當項以小圖標在控件中顯示時使用的 ImageList。
上麵我們了解了ListView 的一些主要屬性,下麵我們來看如何使用它。
四、向ListView 控件添加項
1、我們可以使用ListViewItem集合編輯器來為控件添加項
方法是在ListView 控件的屬性窗口中選擇Items屬性。
2、還可以使用 ListView 控件的Items.Add()方法來為它添加新的項,Add()方法的格式如下:
Add(text,imageIndex)
text 為要添加項所顯示的文本
imageIndex 為可選參數,指示所對應ImageList中的圖標索引
示例:
為窗體添加一個ListView 控件,一個ImageList 控件,一個Button控件,然後在代碼編輯器中添加如下代碼:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim mItem As ListViewItem
Dim i As Integer = 0
ListView1.LargeImageList = Me.ImageList1
ListView1.View = View.LargeIcon
For i = 0 To 3
ListView1.Items.Add("Item " & i, i)
Next
End Sub
運行後,單擊按鈕,效果如下圖六所示:
也可以使用如下代碼來添加Item,其運行效果是一樣的:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ListView1.LargeImageList = Me.ImageList1
ListView1.View = View.LargeIcon
Dim item0 As New ListViewItem("item 0", 0)
Dim item1 As New ListViewItem("item 1", 1)
Dim item2 As New ListViewItem("item 2", 2)
Dim item3 As New ListViewItem("item 3", 3)
ListView1.LargeImageList = Me.ImageList1
ListView1.Items.AddRange(New ListViewItem() {item0, item1, item2, item3})
End Sub
五、為ListView 控件添加列標題
當我們使用ListView 控件的Details 視圖模式的時候,就必須為控件添加對應的列標題,才能顯示出它所有的項。
1、視圖模式下添加列標題
一般我們顯示一個列表的時候,其列標題都應該是固定的,所以我們可以在視圖模式中預先設置好列標題,這樣比較直觀。
先選中ListView 控件,然後在它的屬性窗口中找到 Columns 屬性,單擊後麵的省略符號,如下圖七所示:
然後在彈出的集合編輯器中添加和刪除列標題即可,我們可以在編輯器的右邊中編輯對應的列顯示的文本、寬度以及文字對齊方式,如下圖八所示:
添加完列標題之後記得把ListView 控件的View 屬性設置為 Details,才能顯示出列標題來。
2、使用代碼來添加列標題
我們可以使用Columns.Add方法來動態添加列標頭,使用Columns.Clear()方法來清除所有的列標頭,如下代碼所示,動態添加四個列標題,其中每個列頭的寬為50,
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ListView1.View = View.Details
ListView1.GridLines = True
ListView1.Columns.Clear()
ListView1.Columns.Add("列 1", 50, HorizontalAlignment.Left)
ListView1.Columns.Add("列 2", 50, HorizontalAlignment.Left)
ListView1.Columns.Add("列 3", 50, HorizontalAlignment.Left)
ListView1.Columns.Add("列 4", 50, HorizontalAlignment.Center)
ListView1.Refresh()
End Sub
運行後,單擊按鈕,效果如下圖九所示:
本章我們主要是了解ListView 控件的基本使用,看到這裏相信你也基本上會用它在自己的程序中顯示列表了。請繼續關注我們巧巧讀書網,下一章,我們將去看看如何使用ListView控件模仿Windows操作係統中的文件夾顯示效果。
運行後顯示效果如下圖四所示: