繁体   English   中英

C# 从 treeList devexpress 中的 TreeListNode 获取文件夹路径

[英]C# get folderpath from TreeListNode in treeList devexpress

我将 XtratreeList 与 fileExplorerAssistant 一起使用。 当我想从树列表中获取所选文件夹的路径时遇到问题。 或者我在从 TreeListNode 获取文件夹路径时遇到问题。 请帮我。

我的代码是:

        private void frmMovieAddAuto_Load(object sender, EventArgs e)
    {
        // Scan for all partitions
        System.IO.DriveInfo[] driveList = System.IO.DriveInfo.GetDrives();
        foreach (var drive in driveList)
        {
            // Select only logical fixed partitions
            if (drive.DriveType == System.IO.DriveType.Fixed && drive.IsReady)
            {
                // Add each drive as a root node
                treeListExtension1.RootNodes.Add(new PathNode(drive.RootDirectory.ToString()));
            }
        }
    }

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        TreeListColumn columnname;
        columnname = treeList1.Columns[0];
        columnname.Caption = "Folder Name";

        List<TreeListNode> nodes = treeList1.GetNodeList();
        foreach (TreeListNode node in nodes)
        {
            if (node.Checked == true)
            {
                DirectoryInfo di = new DirectoryInfo(node.GetValue(columnname).ToString());

                foreach (FileInfo fi in di.GetFiles("*.avi;*.mpg;*.mpeg;*.mp4;*.mkv;*.divx;*.AVI;*.MPG;*.MPEG;*.MP4;*.MKV;*.DIVX", SearchOption.AllDirectories))
                {
                    //do something
                }
            }

        }
    }

在这段代码中:

        private void treeList1_AfterCheckNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e)
    {
        // Get the node that is currently focused (selected) in the TreeList
        TreeListNode focusedNode = treeList1.FocusedNode;

        // Get the column that contains the folder path
        TreeListColumn folderPathColumn = treeList1.Columns[0];

        // Get the value of the folder path column from the focused node
        string folderPath = focusedNode.GetValue(folderPathColumn).ToString();

        if(focusedNode.Checked == true)
        {
            pathfolderList.Add(folderPath);
        }
    }

在这一行代码中:

string folderPath = focusedNode.GetValue(folderPathColumn).ToString();

它给出了这个错误:

'Object reference not set to an instance of an object.'

您的问题是如何获取DevExpress.XtraTreeList.Nodes.TreeListNode的完整路径。 这就需要将DisplayText从选中的节点向上遍历到它的根节点,当这个集合反向组合时,结果就是完整的路径。

foreach (var node in treeList1.GetNodeList())
{
    List<string> builder = new List<string>();
    TreeListNode traverse = node;
    // This adds the display text from the leaf to the root.
    while(traverse != null)
    {
        builder.Add(traverse.GetDisplayText(0));
        traverse = traverse.ParentNode;
    }
    // What we want is the root to the leaf, so reverse the list.
    builder.Reverse();
    // Now combine into a path.
    var path = Path.Combine(builder.ToArray());
    Debug.WriteLine(path);
}

调试输出

您可能还会发现DevExpress 文档很有帮助(他们的方法略有不同)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM