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

}
}

TreeView 使用方法:(在View.Details模式下)的更多相关文章

  1. 基于dalvik模式下的Xposed Hook开发的某加固脱壳工具

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/77966109 这段时间好好的学习了一下Android加固相关的知识和流程也大致把A ...

  2. 如何在grails2.3.x中的fork模式下进行调试?-【grails】

    grails2.3.x中默认情况下运行模式被设置成了fork模式,在这种模式下,大家会发现设置了断点后无法进行中断.这是由于fork模式造成的,因为在fork模式下,JVM新起了一个进程,这样调试器就 ...

  3. php cli模式下获取参数的方法

    转载声明:http://blog.csdn.net/fdipzone/article/details/51945892 php在cli模式下接收参数有两种方法 1.使用argv数组 <?php ...

  4. 【配置】检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为【经典】模式)。

      ×   检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为[经典]模式). 我们将ASP.NET程序从IIS6移植到IIS7,可能运行提示以下错误: HTTP 错误 5 ...

  5. 检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(转)

    我们将ASP.NET程序从IIS6移植到IIS7,可能运行提示以下错误: HTTP 错误 500.23 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.N ...

  6. (转)检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(转)

    我们将ASP.NET程序从IIS6移植到IIS7,可能运行提示以下错误: HTTP 错误 500.23 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.N ...

  7. js架构设计模式——MVVM模式下,ViewModel和View,Model有什么区别

    MVVM模式下,ViewModel和View,Model有什么区别 Model:很简单,就是业务逻辑相关的数据对象,通常从数据库映射而来,我们可以说是与数据库对应的model. View:也很简单,就 ...

  8. mysql主从模式下在主库上的某些操作不记录日志的方法

    mysql主从模式下在主库上的某些操作不记录日志的方法 需求场景: 在主库上的需要删除某个用户,而这个用户在从库上不存在(我在接手一个业务的时候,就遇到主从架构用户授权不一致的情况,主库比较全,而从库 ...

  9. php在cli模式下取得命令行中的参数的方法-getopt命令行可传递数组-简单自定义方法取命令行参数

    在cli模式下执行PHP时,自动给脚本文件传递了一个变量$argv,其值即是一个命令中所有值组成的数组(以空格区分),在PHP程序中接收参数有3种方法1.直接使用argv变量数组. 2.使用$_SER ...

随机推荐

  1. The certificate used to sign ***has either expired or has been revoked. An updated certificate is required to sign and install the application

    真机测试的时候弹出这样的提示:The certificate used to sign ***has either expired or has been revoked. An updated ce ...

  2. 面向内容的标记语言--markdonw

    引言: 我们习惯用html来展示数据,尤其是结合了js以及css之后,更是让html变得非常的绚丽,可是有些时候在感受绚丽的同时,我们往往对我们本身想要了解的内容变得漠不关心了,其实并不是所有的知识都 ...

  3. phpcms v9 中的数据库操作函数

    1.查询 $this->select($where = '', $data = '*', $limit = '', $order = '', $group = '', $key='')   返回 ...

  4. Html和CSS布局技巧

    单列布局水平居中 水平居中的页面布局中最为常见的一种布局形式,多出现于标题,以及内容区域的组织形式,下面介绍四种实现水平居中的方法(注:下面各个实例中实现的是child元素的对齐操作,child元素的 ...

  5. 用 IIS 实现请求转发

    最近部门要开发一个简单的APP,部分数据是现有项目已经存在的,为了方便维护,希望只提供一个交互的入口,并且协议的规则不变. 基于这个需求,有两套解决方案: 1.用代码将现有的api封装一层,对请求数据 ...

  6. #英文#品读中国城市个性——上海人的精明&头啖汤

    制定"严格的规则" set the 'hard and fast' rules 担负职责 shoulder responsibility 对...有深刻理解 develop a g ...

  7. Android传递数据5种方法

       Android开发中,在不同模块(如Activity)间经常会有各种各样的数据需要相互传递,我把常用的几种 方法都收集到了一起.它们各有利弊,有各自的应用场景. 我现在把它们集中到一个例子中展示 ...

  8. linux 查看端口号

    在使用Linux系统的过程中,有时候会遇到端口被占用而导致服务无法启动的情况.比如HTTP使用80端口,但当启动Apache时,却发现此端口正在使用. 这种情况大多数是由于软件冲突.或者默认端口设置不 ...

  9. 指定eclipse启动使用的JVM

    不同eclispe对运行时要求不一样,而一台电脑只能同时使用一个运行时,当多个要求不同版本jvm的eclipse需要在一台电脑工作时,需要手动指定eclipse启动使用的jvm. [eclipse-j ...

  10. files list file for package 'xxx' is missing final newline

    #!/usr/bin/python # 8th November, 2009 # update manager failed, giving me the error: # 'files list f ...