1、建立TreeView的標題
2、建立TreeView的Item
3、在TreeView的Item中的建立SubItem
如果將各部分拆分開來的方法為:
1、建立TreeView的標題
2、建立Item
3、建立SubItem
4、將SubItem加入到Item中
5、將Item加入到TreeView中
注:
在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();
}
}
}
{
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:
得到指定文件夾下的文件夾及文件名列表。如下圖:
![](https://images.cnblogs.com/cnblogs_com/scottckt/pic/ListViewP2.jpg)
代碼:
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 ); ;
}
}
}
}
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 ); ;
}
}
}
}