一、ListView類
1、常用的基本屬性:
(1)FullRowSelect:設定是否行選擇模式。(預設為false) 提示:只有在Details視圖該屬性才有意義。
(2) GridLines:設定行和列之間是否顯示網格線。(預設為false)提示:只有在Details視圖該屬性才有意義。
(3)AllowColumnReorder:設定是否可拖動列標題來對改變列的順序。(預設為false)提示:只有在Details視圖該屬性才有意義。
(4)View:擷取或設定項在控制項中的顯示方式,包括Details、LargeIcon、List、SmallIcon、Tile(預設為 LargeIcon)
(5)MultiSelect:設定是否可以選擇多個項。(預設為false)
(6)HeaderStyle:擷取或設定列標題樣式。
Clickable:列標題的作用類似於按鈕,單擊時可以執行操作(例如排序)。
NonClickable:列標題不響應按一下滑鼠。
None:不顯示列標題。
(7)LabelEdit:設定使用者是否可以編輯控制項中項的標籤,對於Detail視圖,只能編輯行第一列的內容。(預設為false)
(8)CheckBoxes:設定控制項中各項的旁邊是否顯示複選框。(預設為false)
(9)LargeImageList:大表徵圖集。提示:只在LargeIcon視圖使用。
(10)SmallImageList:小表徵圖集。提示:只有在SmallIcon視圖使用。
(11)StateImageList:映像蒙板。這些映像蒙板可用作LargeImageList和SmallImageList映像的覆蓋圖,這些映像可用於指示項的應用程式定義的狀態。(暫時不大懂)
(12)SelectedItems:擷取在控制項中選定的項。
(13)CheckedItems:擷取控制項中當前複選框選中的項。
(14)Soritng:對列表視圖的項進行排序。(預設為None)
Ascending:項按遞增順序排序。
Descending:項按遞減順序排序。
None:項未排序。
(15)Scrollable:設定當沒有足夠空間來顯示所有項時是否顯示捲軸。(預設為true)
(16)HoverSelection:設定當滑鼠指標懸停於項上時是否自動選擇項。(預設為false)
(17)HotTracking:設定當滑鼠指標經過項文本時,其外觀是否變為超連結的形式。(預設為false)
(18)HideSelection:設定選定項在控制項沒焦點時是否仍反白。(預設為false)
(19)ShowGroups:設定是否以分組方式顯示項目。(預設為false);
(20)Groups:設定分組的對象集合。
(21)TopItem:擷取或設定控制項中的第一個可見項,可用於定位。(效果類似於EnsureVisible方法)
2、常用方法:
(1)BeginUpdate:避免在調用EndUpdate 方法之前描述控制項。當插入大量資料時,可以有效地避免控制項閃爍,並能大大提高速度。
(2)EndUpdate:在BeginUpdate 方法掛起描述後,繼續描述列表視圖控制項。(結束更新)
(3)EnsureVisible:列表視圖滾動定位到指定索引項目的選項行。(效果類似於TopItem屬性)
(4)FindItemWithText:尋找以給定文本值開頭的第一個 ListViewItem。
(5)FindNearestItem:按照指定的搜尋方向,從給定點開始尋找下一個項。提示:只有在LargeIcon或SmallIcon視圖才能使用該方法。
3、常用事件:
(1)AfterLabelEdit:當使用者編輯完項的標籤時發生,需要LabelEdit屬性為true。
(2)BeforeLabelEdit:當使用者開始編輯項的標籤時發生。
(3)ColumnClick:當使用者在列表視圖控制項中單擊列標題時發生。
二、ListView的五種視圖:
1、LargeIcon:每個項都顯示為一個最大化表徵圖,在它的下面有一個標籤。(效果見)
2、SmallIcon:每個項都顯示為一個小表徵圖,在它的右邊帶一個標籤。(效果見)
3、List:每個項都顯示為一個小表徵圖,在它的右邊帶一個標籤。各項排列在列中,沒有列標題。(效果見)
4、Details:可以顯示任意的列,但只有第一列可以包含一個小表徵圖和標籤,其它的列項只能顯示文字資訊,有列表頭。(效果見)
5、Tile:每個項都顯示為一個完整大小的表徵圖,在它的右邊帶項標籤和子項資訊。(只有Windows XP 和 Windows Server 2003 系列支援)
①Details視圖:
this.listView1.SmallImageList = this.imageList1; //將listView的表徵圖集與imageList1綁定
(1)列表頭建立(記得,需要先建立列表頭)
ColumnHeader ch= new ColumnHeader(); nbsp;ch.Text = "欄位標題1"; //設定欄位標題 ch.Width = 120; //設定列寬度 ch.TextAlign = HorizontalAlignment.Left; //設定列的對齊 this.listView1.Columns.Add(ch); //將列頭添加到ListView控制項。
ColumnHeader ch= new ColumnHeader(); ch.Text = "欄位標題1"; //設定欄位標題 ch.Width = 120; //設定列寬度 ch.TextAlign = HorizontalAlignment.Left; //設定列的對齊 this.listView1.Columns.Add(ch); //將列頭添加到ListView控制項。
或者
this.listView1.Columns.Add("欄位標題1", 120, HorizontalAlignment.Left); //一步添加
this.listView1.Columns.Add("欄位標題1", 120, HorizontalAlignment.Left); //一步添加
(2)添加資料項目
this.listView1.BeginUpdate(); //資料更新,UI暫時掛起,直到EndUpdate繪製控制項,可以有效避免閃爍並大大提高載入速度 for (int i = 0; i < 10; i++) //添加10行資料 { ListViewItem lvi = new ListViewItem(); lvi.ImageIndex = i; //通過與imageList綁定,顯示imageList中第i項表徵圖 lvi.Text = "subitem" + i; lvi.SubItems.Add("第2列,第"+i+"行"); lvi.SubItems.Add("第3列,第"+i+"行"); this.listView1.Items.Add(lvi); } this.listView1.EndUpdate(); //結束資料處理,UI介面一次性繪製。
this.listView1.BeginUpdate(); //資料更新,UI暫時掛起,直到EndUpdate繪製控制項,可以有效避免閃爍並大大提高載入速度 for (int i = 0; i < 10; i++) //添加10行資料 { ListViewItem lvi = new ListViewItem(); lvi.ImageIndex = i; //通過與imageList綁定,顯示imageList中第i項表徵圖 lvi.Text = "subitem" + i; lvi.SubItems.Add("第2列,第"+i+"行"); lvi.SubItems.Add("第3列,第"+i+"行"); this.listView1.Items.Add(lvi); } this.listView1.EndUpdate(); //結束資料處理,UI介面一次性繪製。
(3)顯示項目
foreach (ListViewItem item in this.listView1.Items) { for (int i = 0; i < item.SubItems.Count; i++) { MessageBox.Show(item.SubItems[i].Text); } }
foreach (ListViewItem item in this.listView1.Items) { for (int i = 0; i < item.SubItems.Count; i++) { MessageBox.Show(item.SubItems[i].Text); } }
(4)移除某項
foreach (ListViewItem lvi in listView1.SelectedItems) //選中項遍曆 { listView1.Items.RemoveAt(lvi.Index); // 按索引移除 //listView1.Items.Remove(lvi); //按項移除 }
foreach (ListViewItem lvi in listView1.SelectedItems) //選中項遍曆 { listView1.Items.RemoveAt(lvi.Index); // 按索引移除 //listView1.Items.Remove(lvi); //按項移除 }
(5)行高設定(利用imageList實現)
ImageList imgList = new ImageList(); imgList.ImageSize = new Size(1, 20);// 設定行高 20 //分別是寬和高 listView1.SmallImageList = imgList; //這裡設定listView的SmallImageList ,用imgList將其撐大
ImageList imgList = new ImageList(); imgList.ImageSize = new Size(1, 20);// 設定行高 20 //分別是寬和高 listView1.SmallImageList = imgList; //這裡設定listView的SmallImageList ,用imgList將其撐大
(6)清空
this.listView1.Clear(); //從控制項中移除所有項和列(包括列表頭)。 this.listView1.Items.Clear(); //只移除所有的項。
this.listView1.Clear(); //從控制項中移除所有項和列(包括列表頭)。 this.listView1.Items.Clear(); //只移除所有的項。
運行效果:
②largeIcon視圖:
this.listView1.View = View.LargeIcon; this.listView1.LargeImageList = this.imageList2; this.listView1.BeginUpdate(); for (int i = 0; i < 10; i++) { ListViewItem lvi = new ListViewItem(); lvi.ImageIndex = i; lvi.Text = "item" + i; this.listView1.Items.Add(lvi); } this.listView1.EndUpdate();
this.listView1.View = View.LargeIcon; this.listView1.LargeImageList = this.imageList2; this.listView1.BeginUpdate(); for (int i = 0; i < 10; i++) { ListViewItem lvi = new ListViewItem(); lvi.ImageIndex = i; lvi.Text = "item" + i; this.listView1.Items.Add(lvi); } this.listView1.EndUpdate();
運行效果:
③SmallIcon視圖:
this.listView1.View = View.SmallIcon; this.listView1.SmallImageList= this.imageList1; this.listView1.BeginUpdate(); for (int i = 0; i < 10; i++) { ListViewItem lvi = new ListViewItem(); lvi.ImageIndex = i; lvi.Text = "item" + i; this.listView1.Items.Add(lvi); } this.listView1.EndUpdate();
this.listView1.View = View.SmallIcon; this.listView1.SmallImageList= this.imageList1; this.listView1.BeginUpdate(); for (int i = 0; i < 10; i++) { ListViewItem lvi = new ListViewItem(); lvi.ImageIndex = i; lvi.Text = "item" + i; this.listView1.Items.Add(lvi); } this.listView1.EndUpdate();
運行效果:
④List視圖:
this.listView1.View = View.List; this.listView1.SmallImageList= this.imageList1; this.listView1.BeginUpdate(); for (int i = 0; i < 10; i++) { ListViewItem lvi = new ListViewItem(); lvi.ImageIndex = i; lvi.Text = "item" + i; this.listView1.Items.Add(lvi); } this.listView1.EndUpdate();
this.listView1.View = View.List; this.listView1.SmallImageList= this.imageList1; this.listView1.BeginUpdate(); for (int i = 0; i < 10; i++) { ListViewItem lvi = new ListViewItem(); lvi.ImageIndex = i; lvi.Text = "item" + i; this.listView1.Items.Add(lvi); } this.listView1.EndUpdate();
運行效果:
三、其它應用
1、分組:
ListViewGroup man_lvg = new ListViewGroup(); //建立男生分組 man_lvg.Header = "男生"; //設定組的標題。 //man_lvg.Name = "man"; //設定組的名稱。 man_lvg.HeaderAlignment = HorizontalAlignment.Left; //設定組標題文本的對齊。(預設為Left) ListViewGroup women_lvg = new ListViewGroup(); //建立女生分組 women_lvg.Header = "女生"; //women_lvg.Name = "women"; women_lvg.HeaderAlignment = HorizontalAlignment.Center; //組標題置中對齊 this.listView1.Groups.Add(man_lvg); //把男生分組添加到listview中 this.listView1.Groups.Add(women_lvg); //把男生分組添加到listview中 this.listView1.ShowGroups = true; //記得要設定ShowGroups屬性為true(預設是false),否則顯示不出分組 for (int i = 0; i < 5; i++) { ListViewItem lvi = new ListViewItem(); lvi.ImageIndex = i; lvi.Text = "item"+i; lvi.ForeColor = Color.Blue; //設定行顏色 lvi.SubItems.Add("第2列,第"+i+"行"); lvi.SubItems.Add("第3列,第"+i+"行"); man_lvg.Items.Add(lvi); //分組添加子項 // 或 lvi.Group = man_lvg; //分組添加子項 this.listView1.Items.Add(lvi); }
ListViewGroup man_lvg = new ListViewGroup(); //建立男生分組 man_lvg.Header = "男生"; //設定組的標題。 //man_lvg.Name = "man"; //設定組的名稱。 man_lvg.HeaderAlignment = HorizontalAlignment.Left; //設定組標題文本的對齊。(預設為Left) ListViewGroup women_lvg = new ListViewGroup(); //建立女生分組 women_lvg.Header = "女生"; //women_lvg.Name = "women"; women_lvg.HeaderAlignment = HorizontalAlignment.Center; //組標題置中對齊 this.listView1.Groups.Add(man_lvg); //把男生分組添加到listview中 this.listView1.Groups.Add(women_lvg); //把男生分組添加到listview中 this.listView1.ShowGroups = true; //記得要設定ShowGroups屬性為true(預設是false),否則顯示不出分組 for (int i = 0; i < 5; i++) { ListViewItem lvi = new ListViewItem(); lvi.ImageIndex = i; lvi.Text = "item"+i; lvi.ForeColor = Color.Blue; //設定行顏色 lvi.SubItems.Add("第2列,第"+i+"行"); lvi.SubItems.Add("第3列,第"+i+"行"); man_lvg.Items.Add(lvi); //分組添加子項 // 或 lvi.Group = man_lvg; //分組添加子項 this.listView1.Items.Add(lvi); }
運行效果:
2、尋找文本(只能尋找到匹配首碼的文本且只能找出第一個符合的項):
ListViewItem foundItem= this.listView1.FindItemWithText(this.textBox1.Text,true,0); //參數1:要尋找的文本;參數2:是否子項也要尋找;參數3:開始尋找位置 if (foundItem != null) { this.listView1.TopItem = foundItem; //定位到該項 foundItem.ForeColor = Color.Red; }