Visual C# 2010 实现资源管理器

演练:使用设计器创建带有 ListView 和 TreeView 控件的资源管理器样式的界面

Visual Studio 2010
 
 
 
 
此主题尚未评级 - 评价此主题
 

 

Visual Studio 的一个优点是能够在短时间内创建具有专业级外观的 Windows 窗体应用程序。 通常情况下,创建一个带有 ListView  TreeView 控件的用户界面 (UI),该界面类似于 Windows 操作系统的 Windows 资源管理器。 Windows 资源管理器显示了用户计算机上的文件和文件夹的层次结构。

Visual C#  2010 实现资源管理器注意

显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于您现用的设置或版本。 若要更改设置,请在“工具”菜单上选择“导入和导出设置” 有关更多信息,请参见 使用设置

创建包含 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 属性中的椭圆 (Visual C#  2010 实现资源管理器),以打开 ColumnHeader 集合编辑器。添加三列,并将其 Text 属性分别设置为 NameType  Last Modified 单击“确定”关闭对话框。

    4.  SmallImageList 属性设置为 imageList1

  8. 实现代码以便将节点和子节点填充到 TreeView 中。 将该代码添加到 Form1 类中。

     
            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 语句。

     
    using System.IO;
    
    
    
  10. 在窗体的构造函数或 Load 事件处理方法中,调用上一步中的设置方法。 将该代码添加到窗体构造函数中。

     
    		public Form1()
    		{
    			InitializeComponent();
    			PopulateTreeView();
    		}
    
    
    
  11. 处理 treeview1  NodeMouseClick 事件,实现代码以便在单击某个节点时,用该节点的内容来填充 listview1 将该代码添加到 Form1 类中。

     
    		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 事件与其事件处理方法相关联。 将该代码添加到窗体构造函数中。

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

现在可以测试窗体,以确保它的行为与预期相同。

测试窗体

  • 按 F5 运行应用程序。

    您将看到一个包含 TreeView 控件的拆分窗体,该窗体左侧显示您的项目目录,右侧是分为三列的 ListView 控件。 选择目录节点可以遍历 TreeView,而 ListView 中将填充选定目录的内容。

上一篇:双11背后通信技术解读:大促场景下云通信高可用、稳定性实战


下一篇:使用delphi 开发多层应用(五)第一个kbmMW 服务例子