Visual C# 2010 實現資源管理器


演練:使用設計器創建帶有 ListView 和 TreeView 控件的資源管理器樣式的界面

Visual Studio 2010
 
 
 
 
此主題尚未評級 - 評價此主題
 

 

Visual Studio 的一個優點是能夠在短時間內創建具有專業級外觀的 Windows 窗體應用程序。 通常情況下,創建一個帶有 ListView  TreeView 控件的用戶界面 (UI),該界面類似於 Windows 操作系統的 Windows 資源管理器。 Windows 資源管理器顯示了用戶計算機上的文件和文件夾的層次結構。

注意注意

顯示的對話框和菜單命令可能會與“幫助”中的描述不同,具體取決於您現用的設置或版本。 若要更改設置,請在“工具”菜單上選擇“導入和導出設置” 有關更多信息,請參見 使用設置

創建包含 ListView 和 TreeView 控件的窗體

  1. “文件”菜單上指向“新建”,再單擊“項目”

  2. “新建項目”對話框中,請執行以下操作:

    1. 在類別中選擇“Visual Basic”“Visual C#”

    2. 在模板列表中,選擇“Windows 窗體應用程序”

  3. 單擊“確定” 隨即便會創建一個新的 Windows 窗體項目。

  4. 向該窗體添加一個 SplitContainer 控件,並將其 Dock 屬性設置為 Fill

  5. 向該窗體中添加一個名為 imageList1  ImageList,然后使用“屬性”窗口按所列順序添加兩個圖像:一個文件夾圖像和一個文檔圖像。

  6. 向該窗體添加一個名為 treeview1  TreeView 控件,將其置於 SplitContainer 控件的左側。  treeView1 的“屬性”窗口中,執行以下操作:

    1.  Dock 屬性設置為 Fill

    2.  ImageList 屬性設置為 imagelist1

  7. 向該窗體中添加一個名為 listView1  ListView 控件,將其置於 SplitContainer 控件的右側。  listview1 的“屬性”窗口中,執行以下操作:

    1.  Dock 屬性設置為 Fill

    2.  View 屬性設置為 Details

    3. 單擊 Columns 屬性中的橢圓 (VisualStudioEllipsesButton 屏幕快照),以打開 ColumnHeader 集合編輯器。添加三列,並將其 Text 屬性分別設置為 NameType  Last Modified 單擊“確定”關閉對話框。

    4.  SmallImageList 屬性設置為 imageList1

  8. 實現代碼以便將節點和子節點填充到 TreeView 中。 將該代碼添加到 Form1 類中。

    C#
    VB
     
            private void PopulateTreeView()
            {
                TreeNode rootNode;
    			
    			DirectoryInfo info = new DirectoryInfo(@"../..");
                if (info.Exists)
                {
                    rootNode = new TreeNode(info.Name);
                    rootNode.Tag = info;
                    GetDirectories(info.GetDirectories(), rootNode);
                    treeView1.Nodes.Add(rootNode);
                }
            }
    
            private void GetDirectories(DirectoryInfo[] subDirs, 
    			TreeNode nodeToAddTo)
            {
                TreeNode aNode;
                DirectoryInfo[] subSubDirs;
                foreach (DirectoryInfo subDir in subDirs)
                {
                    aNode = new TreeNode(subDir.Name, 0, 0);
                    aNode.Tag = subDir;
    				aNode.ImageKey = "folder";
                    subSubDirs = subDir.GetDirectories();
                    if (subSubDirs.Length != 0)
                    {
                        GetDirectories(subSubDirs, aNode);
                    }
                    nodeToAddTo.Nodes.Add(aNode);
                }
            }
    
    
    
  9. 由於以前的代碼使用 System.IO 命名空間,因此需要在窗體頂部添加 using 或 import 語句。

    C#
    VB
     
    using System.IO;
    
    
    
  10. 在窗體的構造函數或 Load 事件處理方法中,調用上一步中的設置方法。 將該代碼添加到窗體構造函數中。

    C#
    VB
     
    		public Form1()
    		{
    			InitializeComponent();
    			PopulateTreeView();
    		}
    
    
    
  11. 處理 treeview1  NodeMouseClick 事件,實現代碼以便在單擊某個節點時,用該節點的內容來填充 listview1 將該代碼添加到 Form1 類中。

    C#
    VB
     
    		void treeView1_NodeMouseClick(object sender,
    			TreeNodeMouseClickEventArgs e) 
    		{
    			TreeNode newSelected = e.Node;
    			listView1.Items.Clear();
    			DirectoryInfo nodeDirInfo = (DirectoryInfo)newSelected.Tag;
    			ListViewItem.ListViewSubItem[] subItems;
    			ListViewItem item = null;
    
    			foreach (DirectoryInfo dir in nodeDirInfo.GetDirectories())
    			{
    				item = new ListViewItem(dir.Name, 0);
    				subItems = new ListViewItem.ListViewSubItem[]
                        {new ListViewItem.ListViewSubItem(item, "Directory"), 
                         new ListViewItem.ListViewSubItem(item, 
    						dir.LastAccessTime.ToShortDateString())};
    				item.SubItems.AddRange(subItems);
    				listView1.Items.Add(item);
    			}
    			foreach (FileInfo file in nodeDirInfo.GetFiles())
    			{
    				item = new ListViewItem(file.Name, 1);
    				subItems = new ListViewItem.ListViewSubItem[]
                        { new ListViewItem.ListViewSubItem(item, "File"), 
                         new ListViewItem.ListViewSubItem(item, 
    						file.LastAccessTime.ToShortDateString())};
    
    				item.SubItems.AddRange(subItems);
    				listView1.Items.Add(item);
    			}
    
    			listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
    		}
    
    
    

    如果使用的是 C#,請確保將 NodeMouseClick 事件與其事件處理方法相關聯。 將該代碼添加到窗體構造函數中。

    C#
     
    			this.treeView1.NodeMouseClick += 
    				new TreeNodeMouseClickEventHandler(this.treeView1_NodeMouseClick);
    
    
    

現在可以測試窗體,以確保它的行為與預期相同。

測試窗體

  • 按 F5 運行應用程序。

    您將看到一個包含 TreeView 控件的拆分窗體,該窗體左側顯示您的項目目錄,右側是分為三列的 ListView 控件。 選擇目錄節點可以遍歷 TreeView,而 ListView 中將填充選定目錄的內容。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM