C# 如何显示所选树节点的详细信息

C# 如何显示所选树节点的详细信息,c#,xml,winforms,treeview,C#,Xml,Winforms,Treeview,我需要的是,当选择树节点时,应用程序需要显示列出的所选文件夹(或文件)详细信息。详细信息应显示在同一窗口中,但与文件夹层次结构树分开 我已经创建了一个应用程序,它可以递归地搜索文件/文件夹,并编写XML文件,稍后用于填充树视图。我的问题是,当我填充树视图时,它会用xml中的属性(大小、创建日期、上次修改…)填充,我不希望这样,我希望它只显示文件/文件夹的名称,当我单击树节点时,它会显示特定文件/文件夹的详细信息 我用这个代码做了所有这些 但问题是在这些代码行中,它们在树状视图中显示所有信息

我需要的是,当选择树节点时,应用程序需要显示列出的所选文件夹(或文件)详细信息。详细信息应显示在同一窗口中,但与文件夹层次结构树分开

我已经创建了一个应用程序,它可以递归地搜索文件/文件夹,并编写XML文件,稍后用于填充树视图。我的问题是,当我填充树视图时,它会用xml中的属性(大小、创建日期、上次修改…)填充,我不希望这样,我希望它只显示文件/文件夹的名称,当我单击树节点时,它会显示特定文件/文件夹的详细信息

我用这个代码做了所有这些

但问题是在这些代码行中,它们在树状视图中显示所有信息

           foreach (var att in xElement.Attributes())
           {
                treeNode.Text = treeNode.Text + " " + att.Name.LocalName + ":" + att.Value;
           }
有人能帮我解决这个问题吗?选择树节点时如何显示文件/文件夹详细信息

这是我的全部密码

public partial class frmMain : Form
    {
        XDocument xDoc = null;
        string path = null;

        public frmMain()
        {
            InitializeComponent();
        }        
        /// <summary>
        /// When button Browse is clicked:
        /// - opens folder browser and lets user choose which folder to display
        /// - creates XML file based on selected path
        /// - fills treeView with that XML file
        /// </summary>
        private void btnBrowse_Click(object sender, EventArgs e)
        {
            listDetails.Items.Clear();
            FolderBrowserDialog fwd = new FolderBrowserDialog();
            if(fwd.ShowDialog() == DialogResult.OK)
            {
                lblPath.Text = "Path: " + fwd.SelectedPath; // Shows path selected by user 
                path = fwd.SelectedPath; // stores that path in string for later use
            }
            CreateXML(); 
            CreateTree();
        }
        /// <summary>
        /// Recursively search through files and folders to create XML file
        /// - 
        /// </summary>     
        private double Recursion(string folder, XElement folderElement)
        {
            folderElement.SetValue(folder);
            DirectoryInfo dirInfo = new DirectoryInfo(folder);

            int number_Of_Files = 0; // Number of files in folder
            double folder_Size = 0; // Folder size in bytes

            FileInfo[] files = null;
            //DirectoryInfo[] subDirs = null;

            try
            {
                files = dirInfo.GetFiles(); //Returns file list from current directory

                if (files != null)
                {
                    foreach (FileInfo f in files) //Lists all files in file list and 
                    {
                        double fileSize = f.Length;
                        folder_Size += fileSize;
                        folderElement.Add(new XElement("File", new object[] {
                        new XAttribute("Size",fileSize + "(bytes)"),
                        new XAttribute("Created", f.CreationTime.ToShortDateString()),
                        new XAttribute("LastAccess", f.LastAccessTime.ToShortDateString()),
                        new XAttribute("LastModified", f.LastWriteTime.ToShortDateString()),
                        f.Name

                    }));
                        number_Of_Files += 1; //Increments everytime it finds file in folder 
                    }
                }
            }
            catch (UnauthorizedAccessException e)
            {
                MessageBox.Show(e.Message);
                writeErrorLog(e.Message);
            }

            catch (DirectoryNotFoundException e)
            {
                MessageBox.Show(e.Message);
                writeErrorLog(e.Message);
            }

            try
            {
                //Lists all sub folders in current directory
                foreach (string subDirs in Directory.GetDirectories(folder))
                {
                    XElement childDirectory = new XElement("Directory");
                    folderElement.Add(childDirectory);
                    double dirSize = Recursion(subDirs, childDirectory); //Call Recursion for found sub folder in folder 
                    folder_Size += dirSize;
                }
                // Writes attributes of XML folder element 
                folderElement.Add(new XAttribute[] {
                new XAttribute("FolderSize", folder_Size + "(bytes)"),
                new XAttribute("NumberOfFiles", number_Of_Files)
            });                
            }
            catch (UnauthorizedAccessException e)
            {
                MessageBox.Show(e.Message);
                writeErrorLog(e.Message);
            }

            catch (DirectoryNotFoundException e)
            {
                MessageBox.Show(e.Message);
                writeErrorLog(e.Message);
            }
            return folder_Size;
        }
        /// <summary>
        /// Creates tree node 
        /// -
        /// </summary>
        private void AddTreeNode(XElement xElement, TreeNode treeNode)
        {
            foreach (var att in xElement.Attributes())
            {
                treeNode.Text = treeNode.Text + " " + att.Name.LocalName + ":" + att.Value;
            }

            foreach (XElement childElement in xElement.Elements())
            {
                TreeNode Node = treeNode.Nodes[treeNode.Nodes.Add(new TreeNode(childElement.Value))];
                AddTreeNode(childElement, Node);
            }
        }
        /// <summary>
        /// Creates XML file 
        /// - If directory exists in path selected by user
        /// - sets root element for XML file
        /// - recursively search through files and folders in that path to create XML file
        /// </summary>
        private void CreateXML()
        {
            if (Directory.Exists(path))
            {
                string header = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><Directory></Directory> ";
                xDoc = XDocument.Parse(header);
                XElement root = xDoc.Root;

                Recursion(path, root);
            }
        }
        /// <summary>
        /// - Clears tree view everytime method is called 
        /// - Checks if XML document is null
        /// - If not creates tree node instance 
        /// - Uses method AddTreeNode to create tree nodes 
        /// - Fills tree view with those nodes
        /// </summary>
        private void CreateTree()
        {
            folderBrowserTree.Nodes.Clear();
            if(xDoc != null)
            {
                TreeNode rootNode = new TreeNode(xDoc.Root.FirstNode.ToString());
                AddTreeNode(xDoc.Root, rootNode);
                folderBrowserTree.Nodes.Add(rootNode);
                //folderBrowserTree.ExpandAll(); //If wanted tree view can display tree nodes as expanded
            }
        }
        /// <summary>
        /// When tree node is selected, displays tree node details in list view
        /// </summary>
        private void folderBrowserTree_AfterSelect(object sender, TreeViewEventArgs e)
        {            
            listDetails.Items.Clear(); // Clears list view everytime this method is called
            TreeDetails();
            string str = folderBrowserTree.SelectedNode.Text;

            var details = str.Split(); // Splits string by whitespaces
            listDetails.Items.Add("Name: " + details[0]);

            for (int i = 1; i < details.Length; i++)
            {
                listDetails.Items.Add(details[i]);
            }

        }
公共部分类frmMain:Form
{
XDocument xDoc=null;
字符串路径=null;
公共财政收入()
{
初始化组件();
}        
/// 
///单击“浏览”按钮时:
///-打开文件夹浏览器,让用户选择要显示的文件夹
///-根据所选路径创建XML文件
///-使用该XML文件填充treeView
/// 
私有无效btnBrowse\u单击(对象发送者,事件参数)
{
listDetails.Items.Clear();
FolderBrowserDialog fwd=新建FolderBrowserDialog();
if(fwd.ShowDialog()==DialogResult.OK)
{
lblPath.Text=“Path:+fwd.SelectedPath;//显示用户选择的路径
path=fwd.SelectedPath;//将该路径存储在字符串中以供以后使用
}
CreateXML();
CreateTree();
}
/// 
///递归搜索文件和文件夹以创建XML文件
/// - 
///      
私有双递归(字符串文件夹、XElement folderElement)
{
folderElement.SetValue(文件夹);
DirectoryInfo dirInfo=新的DirectoryInfo(文件夹);
int number_Of_Files=0;//文件夹中的文件数
双文件夹\u Size=0;//文件夹大小(字节)
FileInfo[]files=null;
//DirectoryInfo[]subDirs=null;
尝试
{
files=dirInfo.GetFiles();//从当前目录返回文件列表
如果(文件!=null)
{
foreach(FileInfo f in files)//列出文件列表和
{
双文件大小=f.长度;
文件夹大小+=文件大小;
添加(新元素(“文件”,新对象[]){
新的XAttribute(“大小”,文件大小+“(字节)”),
新XAttribute(“已创建”,f.CreationTime.ToSortDateString()),
新的XAttribute(“LastAccess”,f.LastAccessTime.ToSortDateString()),
新的XAttribute(“LastModified”,f.LastWriteTime.ToSortDateString()),
f、 名字
}));
\u文件数+=1;//每次在文件夹中找到文件时递增
}
}
}
捕获(未经授权的访问例外)
{
MessageBox.Show(e.Message);
writeErrorLog(e.Message);
}
catch(directorynotfounde异常)
{
MessageBox.Show(e.Message);
writeErrorLog(e.Message);
}
尝试
{
//列出当前目录中的所有子文件夹
foreach(Directory.GetDirectories(文件夹)中的字符串子目录)
{
XElement childDirectory=新XElement(“目录”);
添加(子目录);
double dirSize=递归(subDirs,childDirectory);//为文件夹中找到的子文件夹调用递归
文件夹大小+=dirSize;
}
//写入XML文件夹元素的属性
folderElement.Add(新的XAttribute[]{
新的XAttribute(“FolderSize”,文件夹大小+“(字节)”,
新XAttribute(“NumberOfFiles”,文件的数量)
});                
}
捕获(未经授权的访问例外)
{
MessageBox.Show(e.Message);
writeErrorLog(e.Message);
}
catch(directorynotfounde异常)
{
MessageBox.Show(e.Message);
writeErrorLog(e.Message);
}
返回文件夹大小;
}
/// 
///创建树节点
/// -
/// 
私有void AddTreeNode(XElement XElement,TreeNode TreeNode)
{
foreach(xElement.Attributes()中的var att)
{
treeNode.Text=treeNode.Text+“”+att.Name.LocalName+”:“+att.Value;
}
foreach(XElement.Elements()中的XElement-childElement)
{
TreeNode Node=TreeNode.Nodes[TreeNode.Nodes.Add(newtreenode(childElement.Value));
AddTreeNode(子元素,节点);
}
}
/// 
///创建XML文件
///-如果用户选择的路径中存在目录
///-设置XML文件的根元素
///-递归搜索该路径中的文件和文件夹以创建XML文件
/// 
私有void CreateXML()
{
if(目录存在(路径))
{
字符串标题=”;
xDoc=XDocument.Parse(头);
XElement root=xDoc.root;
递归(路径,根);
}