zoukankan      html  css  js  c++  java
  • 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); ;
                }
            }

        }
    }



  • 相关阅读:
    前沿技术解密——VirtualDOM
    Ques核心思想——CSS Namespace
    Unix Pipes to Javascript Pipes
    Road to the future——伪MVVM库Q.js
    聊聊CSS postproccessors
    【译】十款性能最佳的压缩算法
    Kafka Streams开发入门(9)
    Kafka Streams开发入门(8)
    【译】Kafka Producer Sticky Partitioner
    【译】99th Percentile Latency at Scale with Apache Kafka
  • 原文地址:https://www.cnblogs.com/scottckt/p/1041327.html
Copyright © 2011-2022 走看看