现在的位置: 首页 > 综合 > 正文

c# ListView控件学习

2013年06月10日 ⁄ 综合 ⁄ 共 6432字 ⁄ 字号 评论关闭

ListView控件的常用事件

AfterLabelEdit

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

BeforeLabelEdit

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

ColumnClick

單擊一列時,引發該事件

ItemActivate

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


其它:

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

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

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

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>
        privatevoid ListViewSet()
        {
           
//ListView顯示方式
            listViewControl.View = View.Details;
        }      

        ///
<summary>
       
/// //手動填加ListView方法1
       
///
</summary>
        privatevoid 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>
        privatevoid 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
{
publicpartialclass Form1 : Form
{
public Form1()
{
InitializeComponent();
ListViewSet();
GetFolderTreeView(
@"c:/");
}

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

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

///<summary>
/// 得到目錄中的內容
///</summary>
privatevoid 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 diin 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 fiin 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>
privatevoid 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); ;
}
}

}
}

抱歉!评论已关闭.