C# ListView用法詳解

來源:互聯網
上載者:User
一、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;   }
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.