c# ListView控件學習

TreeView 使用方法:(在View.Details模式下)
         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();
        }

    }
}

例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 ); ;
            }
        }

    }
}

转载于:https://www.cnblogs.com/82767136/articles/1254488.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值