C# ListView控件基本用法

最近做一个通过C#来设置桌面背景的功能。用到了listView这个控件。查找资料发现这个不错

c# ListView控件的常用屬性、方法及事件

Posted on 2008-01-15 10:24 eric(陈宽田) 阅读(3832) 评论(4)  编辑 收藏 所属分类: C#


ListView控件常用屬性

Activation

控件用戶在列表視圖中激活選項的方式。含值如下:

Standard:這個設置是用戶為自己的機器選擇的值

OneClick:單擊一個選項,激活它

TwoClick:雙擊一個選項,激活它

Alignment

可以控件列表視圖中的選項對齊的方式。值如下:

Default:如果用戶拖放一個選項,它將仍位於拖動前的位置

Left:選項與ListView控件的左邊界對齊

Top:選項與ListView控件的頂邊界對齊

SnapToGridListView控件包含一個不可見的網絡,選項都放在該網絡中

AllowColumnReorder

允許用戶改變列表視圖中列的順序。如果這麼做,就應確保即使改變了列的屬性順序,填充列表視圖的例程也能正確插入選項。

AutoArrange

自動根據Alignment屬性排序。如果用戶把一個選項拖放到列表視圖的中央,且AlignmentLeft,則選項會自動左對齊。只有在View屬性是LargeIcoSmaillIcon時,這個屬性才有意義。

CheckBoxes

列表視圖中的每個選項會在其左邊顯示一個複選框。

CheckedInices

CheckedItems

利用這兩個屬性分別可以訪問索引和選項的集合,該集合包含列表中被選中的選項。

Columns

列表視圖可以包含列,通過這個屬性可以訪誤碼列集合,通過該集合,可以增加或刪除列

FocusedItem

包含視圖中有焦點的選項。如果沒有選項,該屬性就為Null

FullRowSelect

True時,單擊一個選項,該選項所在的整行文本都會突出顯示。如果該屬性為False,則只有選項本向會突出顯示

GridLines

True時,列表視圖會在行和列之間繪製網絡線。只有View屬性為Details時,這個屬性才有意義

HeaderStyle

列標題有顯示方式,有3種樣式:

Clickable:列標題為一個按鈕

NonClickable:列標題不響就鼠標單擊

None:不顯示列標題

HoverSelection

True時,用戶可以把鼠標指針放在列表視圖的一個選項上,以選擇它

Items

列表視圖的選項集合

LabelEdit

True時,用戶可以在Details視圖下編輯第一列的內容

LabelWrap

True時,標籤會自動換行,以顯示所有文本

LargeImageList

這個屬性包含ImageList,而ImageList包含大圖像。這些圖像可以在View屬性為LargeIcon時使用。

MultiSelect

可以多選

Scrollabel

顯示滾動條

SelectedIndices

SelectedItems

這兩個屬性分別包含選中的索引和選項的集合

SmallImageList

View屬性為SmaillIcon時,這個屬性包含了ImageList,其中ImageList包含了要使用的圖像

Sorting

可以讓列表視圖對包含的選項排序,有3種模式:

Ascending

Descending

None

StateImageList

ImageList包含圖像的蒙板,這些圖像蒙板可用作LargeImageListSmallImageList圖像的覆蓋圖,表標定制的狀態

TopItem

返回列表視圖頂部的選項

View

列表視圖可以用4種不同的模式顯示其選項:

LargeIcon:所有選項都在其旁邊顯示一個大圖標(32*32)和一個標籤

SamllIcon:所有選項都在其旁邊顯示一個小圖標(32*16)和一個標籤

List:只顯示一列。該列可以包含一個圖標和一個標籤

Details:可以顯示任意數量的列。只有第一列可以包含圖標

Tile(只用於WindowsXp和較新的Windwos平台)顯示一個大圖標和一個標籤,在圖標的右邊顯示子項信息


ListView控件的常用方法

BeginUpdate

開始更新,直到調用EmdUpdate為止。當一次插入多個選項使用這個方法很有用,因為它會禁止視圖閃爍,並可以大大提高速度

Clear

徹度清除視圖,刪除所有的選項和列

EndUpdate

結束更新

EnsureVisible

列表視圖滾動以顯示指定索引的選項

GetItemAt

返回列表視圖中位於x,y的選項

 

ListView控件的常用事件

AfterLabelEdit

在編輯了標籤后,引發該事件

BeforeLabelEdit

在用戶開始編輯標籤前,引發該事件

ColumnClick

單擊一列時,引發該事件

ItemActivate

在激活一個選項時,引發該事件


其它:

        列表視圖的選項總是ListViewItem類的一個實例。ListViewItems有一個屬性SubItems,其中包含另一個類ListViewSubItem的實例。


        ColumnHeader
        要使用列表視圖顯示列標題,需要把類ColumnHeader的實例添加到ListViewColumns集合加。

        ImageList控件
          ImageList控件提供了一個集合,可以用於存儲在窗體的其它控件中使用的圖像。

自己對ListView學習內容:
      http://www.cnblogs.com/scottckt/archive/2008/01/16/1041327.html   

ListView 使用方法:(在View.Details模式下)
         1、建立ListView 的標題
         2、建立ListView 的Item
         3、在ListView 的Item中的建立SubItem
         
         如果將各部分拆分開來的方法為:
         1、建立ListView 的標題
         2、建立Item
         3、建立SubItem
         4、將SubItem加入到Item中
         5、將Item加入到ListView
         
         注:
         在View.Details模式下,Item相當於建立主列中的資料;SubItem相當於建立其它列中的資料。
         其它模式可以不用建立SubItem。

下邊用例子來學習。如實現下圖功能。

代碼:

namespace  ListViewExercise
{
    
public   partial   class  Form1 : Form
    {
        
public  Form1()
        {
            InitializeComponent();
            ListViewSet();
            CreateViewItemMethodOne();
            
// CreateViewItemMethodTow();
        }

        
///   <summary>
        
///  ListView 設置
        
///   </summary>
         private   void  ListViewSet()
        {
            
// ListView顯示方式
            listViewControl.View  =  View.Details;
        }      


        
///   <summary>
        
///  //手動填加ListView方法1
        
///   </summary>
         private   void  CreateViewItemMethodOne()
        {
            listViewControl.BeginUpdate();
            
#region  增加Item的標題,共有三個列
            
// 1、創建標題
            listViewControl.Columns.Add( " 文件名 " );
            listViewControl.Columns.Add(
" 大小 " );
            listViewControl.Columns.Add(
" 創建日期 " );
            
#endregion

            
#region  手動填加ListView方法

            
// 2、增加第一個Item,在View.Details模式下,有點像第一列中一個值
            listViewControl.Items.Add( " folder1 " , " 文件夾1 " , 0 );
            
// 3、增加第一個Item的第一個SubItem,在View.Details模式下,有點像第一列中一個值
            listViewControl.Items[ " folder1 " ].SubItems.Add( " 11 " );
            
// 增加第一個Item的第二個SubItem,在View.Details模式下,有點像第一列中一個值
            listViewControl.Items[ " folder1 " ].SubItems.Add( " 20080114 " );

            listViewControl.Items.Add(
" folder2 " , " 文件夾2 " , 0 );
            listViewControl.Items[
" folder2 " ].SubItems.Add( " 21 " );
            listViewControl.Items[
" folder2 " ].SubItems.Add( " 20080115 " );

            listViewControl.Items.Add(
" 文件夾3 " );
            listViewControl.Items.Add(
" 文件夾4 " );

            
#endregion

            listViewControl.EndUpdate();
        }

        
///   <summary>
        
///   手動填加ListView方法2
        
///   </summary>
         private   void  CreateViewItemMethodTow()
        {
            
#region  增加Item的標題,共有三個列
            
// 1、創建標題,共三列
            listViewControl.Columns.Add( " 文件名 " );
            listViewControl.Columns.Add(
" 大小 " );
            listViewControl.Columns.Add(
" 創建日期 " );
            
#endregion
            listViewControl.BeginUpdate();

            
#region  增加第一個Item
            
// 2、定義一個ListViewItem,在View.Details模式下,有點像第一列中一個值
            ListViewItem lvItem;
            
// 3、定義ListViewSubItem,在View.Details模式下,有點像第二列中一個值
            ListViewItem.ListViewSubItem lvSubItem;

            
// 實列化一個Item,在View.Details模式下,有點像加第一行的第一個值
            lvItem  =   new  ListViewItem();
            
// Item的顯示的文字
            lvItem.Text  =   " 文件夾1 " ;
            
// 4、Item增加到ListView控件中,即增加第一行。在View.Details模式下,有點像增加了第一個項目的第一列的第一個值
            listViewControl.Items.Add(lvItem);
            
            
// 實例化SubItem
            lvSubItem  =   new  ListViewItem.ListViewSubItem();
            lvSubItem.Text 
=   " 10 " ;
            
//5、 將SubItem增加到第一個Item中,在View.Details模式下,有點像增加了第一個項目的第二列的第一個值
            lvItem.SubItems.Add(lvSubItem);

            lvSubItem 
=   new  ListViewItem.ListViewSubItem();
            lvSubItem.Text 
=   " 20080114 " ;
            
// 將SubItem增加到第一個Item中,在View.Details模式下,有點像增加了第一個項目的第三列的第一個值
            lvItem.SubItems.Add(lvSubItem);
            
#endregion

            
#region   增加第二個Item
            lvItem 
=   new  ListViewItem();
            lvItem.Text 
=   " 文件夾2 " ;            
            lvSubItem 
=   new  ListViewItem.ListViewSubItem();
            lvSubItem.Text 
=   " 20 " ;
            lvItem.SubItems.Add(lvSubItem);
            lvSubItem 
=   new  ListViewItem.ListViewSubItem();
            lvSubItem.Text 
=   " 20080115 " ;
            lvItem.SubItems.Add(lvSubItem);
            listViewControl.Items.Add(lvItem);
            
#endregion

            listViewControl.EndUpdate();
        }

    }
}


例2:
     得到指定文件夾下的文件夾及文件名列表。如下圖:


代碼:

using  System.IO;

namespace  ListViewExercise
{
    
public   partial   class  Form1 : Form
    {
        
public  Form1()
        {
            InitializeComponent();
            ListViewSet();
            GetFolderTreeView(
@" c:/ " );
        }

        
///   <summary>
        
///  ListView 設置
        
///   </summary>
         private   void  ListViewSet()
        {
            
// ListView顯示方式
            listViewControl.View  =  View.Details;

     
            
// 項目的雙擊事件
            listViewControl.ItemActivate  +=   new  EventHandler(listViewControl_ItemActivate);
            
// 返回按鈕的事件
            btnReturn.Click += new  EventHandler(btnReturn_Click);
        }

        
///   <summary>
        
///  得到目錄中的內容
        
///   </summary>
         private   void  GetFolderTreeView( string  asPath)
        {
            listViewControl.Clear();
            
#region  增加Item的標題,共有三個列
            
// 創建標題,共三列
            listViewControl.Columns.Add( " 文件名 " );
            listViewControl.Columns.Add(
" 大小 " );
            listViewControl.Columns.Add(
" 創建日期 " );
            
#endregion

            
// 開始更新
            listViewControl.BeginUpdate();

            DirectoryInfo diInfo 
=   new  DirectoryInfo(asPath);
            DirectoryInfo[] dirs 
=  diInfo.GetDirectories();
            FileInfo[] fiInfo 
=  diInfo.GetFiles();

            ListViewItem lviItem;
            ListViewItem.ListViewSubItem lviSubItem;

            
foreach  (DirectoryInfo di  in  dirs)
            {
                lviItem 
=   new  ListViewItem();
                lviItem.Text 
=  di.Name;
                
// 得到文件夾的路徑
                lviItem.Tag  =  di.FullName;

                lviSubItem 
=   new  ListViewItem.ListViewSubItem();                 
                // 文件夾沒有大小
                lviSubItem.Text  =   "" ;
                lviItem.SubItems.Add(lviSubItem);

                lviSubItem 
=   new  ListViewItem.ListViewSubItem();
                lviSubItem.Text 
=  di.CreationTime.ToString();
                lviItem.SubItems.Add(lviSubItem);

                listViewControl.Items.Add(lviItem);
            }

            
foreach  (FileInfo fi  in  fiInfo)
            {
                lviItem 
=   new  ListViewItem();
                lviItem.Text 
=  fi.Name;

                lviSubItem 
=   new  ListViewItem.ListViewSubItem();
                lviSubItem.Text 
=  fi.Length.ToString();
                lviItem.SubItems.Add(lviSubItem);

                lviSubItem 
=   new  ListViewItem.ListViewSubItem();
                lviSubItem.Text 
=  fi.CreationTime.ToString();
                lviItem.SubItems.Add(lviSubItem);

                listViewControl.Items.Add(lviItem);
            }
            
// 結束更新
            listViewControl.EndUpdate();
        }


        
///   <summary>
        
///  定義變量存放路徑
        
///   </summary>
         string  sfileName  =   "" ;

        
///   <summary>
        
///  項目的雙擊事件
        
///   </summary>
        
///   <param name="sender"></param>
        
///   <param name="e"></param>
         void  listViewControl_ItemActivate( object  sender, EventArgs e)
        {
            ListView lvControl 
=  (ListView)sender;
            sfileName 
=  lvControl.SelectedItems[ 0 ].Tag.ToString();
            
if  (lvControl.SelectedItems[ 0 ].Tag.ToString()  ==   "" )
            {
                
try
                {
                    System.Diagnostics.Process.Start(sfileName);
                }
                
catch
                {
                    
return ;
                }
            }
            
else
            {

                GetFolderTreeView(sfileName);
            }
        }


        
///   <summary>
        
///  返回上一級
        
///   </summary>
        
///   <param name="sender"></param>
        
///   <param name="e"></param>
         private   void  btnReturn_Click( object  sender, EventArgs e)
        {
            
/*
             原理:得到路徑,然后截取最后一個"/"之前的路徑,並將其路徑賦給你路徑變量。
             再次單擊返回時,截取此變量中最后一個"/"之前的路徑。
             當獲得不到"/"的位置時說明到達頂層。
             
*/
            
int  iPosition  =  sfileName.LastIndexOf( " // " +   1 ;
            
if  (iPosition  >   0 )
            {
                
string  sA  =  sfileName.Substring( 0 , iPosition);
                GetFolderTreeView(sA);
                sfileName 
=  sfileName.Substring( 0 , iPosition  -   1 ); ;
            }
        }

    }
}
C#ListView 控件是用于显示和编辑项的图形化控件。它类似于表格,可以显示多列的数据,并且支持对列表项进行排序、选择和编辑等操作。以下是 ListView 控件基本用法: 1. 添加 ListView 控件到窗体: 在窗体设计器中,从工具箱中拖拽 ListView 控件到窗体上。 2. 设置 ListView 的 View 属性: ListView 控件有多种视图模式可供选择,例如 Details、LargeIcon、SmallIcon、List 和 Tile 等。根据需要选择适合的视图模式,并将 View 属性设置为相应的值。 3. 添加列头: 在窗体设计器中,右键点击 ListView 控件,选择 "Edit Columns" 选项。在 "ColumnHeader Collection Editor" 对话框中,添加列头并设置相关属性,如文本、宽度、对齐方式等。这些列头将在 ListView 中显示为列标题。 4. 添加列表项: 可以通过代码动态添加列表项,也可以在设计器中静态添加。通过 ListViewItem 类创建新的列表项,并使用 SubItems 属性设置各列的数据。 ```csharp // 动态添加列表项 ListViewItem item = new ListViewItem("Item 1"); item.SubItems.Add("SubItem 1"); item.SubItems.Add("SubItem 2"); listView1.Items.Add(item); // 静态添加列表项 listView1.Items.Add(new ListViewItem(new string[] { "Item 2", "SubItem 3", "SubItem 4" })); ``` 5. 列表项的排序与选择: ListView 控件提供了排序和选择功能。可以通过设置 ListViewSorting 属性来启用排序功能,并使用 ListViewItemSorter 属性自定义排序规则。通过 SelectedItems 属性可以获取当前选中的列表项。 ```csharp // 启用排序功能 listView1.Sorting = SortOrder.Ascending; // 自定义排序规则 listView1.ListViewItemSorter = new MyListViewItemSorter(); // 获取选中的列表项 foreach (ListViewItem item in listView1.SelectedItems) { // 处理选中的列表项 } ``` 6. 编辑列表项: ListView 控件支持对列表项进行编辑。可以通过设置 ListView 的 LabelEdit 属性为 true 来启用编辑模式。在编辑模式下,双击列表项的文本或者使用 F2 键可以进入编辑状态。 以上是 ListView 控件基本用法,你可以根据需要进一步探索和扩展其功能。希望对你有所帮助!
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值