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

        }
    }
  • 相关阅读:
    unordered_set
    树的所有实现
    各类算法模板
    单链表全部实现(绝对史上最完整 附例题)
    求最长回文子串
    无重复的最长子串
    秋叶集
    1451. 重新排列句子中的单词
    152. 乘积最大子数组
    JVM总结的部分内容
  • 原文地址:https://www.cnblogs.com/SpadeA/p/4958607.html
Copyright © 2011-2022 走看看