簡體   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