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

        }
    }



  • 相关阅读:
    《神经网络的梯度推导与代码验证》之vanilla RNN的前向传播和反向梯度推导
    《神经网络的梯度推导与代码验证》之CNN(卷积神经网络)前向和反向传播过程的代码验证
    《神经网络的梯度推导与代码验证》之CNN(卷积神经网络)的前向传播和反向梯度推导
    《神经网络的梯度推导与代码验证》之FNN(DNN)前向和反向传播过程的代码验证
    《神经网络的梯度推导与代码验证》之FNN(DNN)的前向传播和反向梯度推导
    《神经网络的梯度推导与代码验证》之数学基础篇:矩阵微分与求导
    《神经网络的梯度推导与代码验证》系列介绍
    手把手撸套框架-关于2.0的一些畅想
    手把手撸套框架-Victory.Core工具集
    手把手撸套框架-Victory框架1.1 详解
  • 原文地址:https://www.cnblogs.com/scottckt/p/1041327.html
Copyright © 2020-2023  润新知