2014-12-23 57 views
1

我有這樣的事件,其中i用鼠標選擇在treeView1一個節點:我如何從treeView1中僅刪除選定的子節點?

private void treeView1_MouseUp(object sender, MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Right) 
    { 
     treeView1.SelectedNode = treeView1.GetNodeAt(e.X, e.Y); 

     if (treeView1.SelectedNode != null) 
     { 
      menuStrip.Show(treeView1, e.Location); 
     } 
    } 
} 

然後,我有上下文菜單條我選擇來回例如刪除移除目錄: 目錄後除去我要更新的treeView1結構visualy在地方是刪除我的意思是我選擇的節點/子節點。

private void RemoveDirectory(string remoteFile, bool fileordir) 
{ 
    remoteFile = remoteFile.Replace('\\', '/'); 
    if (remoteFile.StartsWith("root")) 
    { 
     remoteFile = remoteFile.Replace("root", string.Empty); 
    } 
    string deleteRequest = txtHost.Text + remoteFile; 
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://" + deleteRequest); 
    if (fileordir == true) 
    { 
     request.Method = WebRequestMethods.Ftp.RemoveDirectory; 
    } 
    request.Credentials = new NetworkCredential(txtUsername.Text, txtPassword.Text); 
    request.Proxy = null; 
    request.UseBinary = false; 
    request.UsePassive = true; 
    request.KeepAlive = false; 
    FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 
    Stream responseStream = response.GetResponseStream(); 
    StreamReader sr = new StreamReader(responseStream); 
    sr.ReadToEnd(); 
    string StatusCode = response.StatusDescription; 
    sr.Close(); 
    response.Close(); 
    treeView1.SelectedNode.Remove(); 
} 

在底部我添加的行:

treeView1.SelectedNode.Remove(); 

但是,這將移除整個節點。 例如,如果我選擇了子節點/ b/c/d/e/f,如果我選擇刪除e,那麼只應刪除e和f。

如果我選擇刪除b,則應刪除b c d e f。

我沒有找到特定子節點的任何選定屬性。

這是我的意思截圖:

Remove Child Selected Node

在這種情況下,我點擊了選擇的子節點$回收站 當我點擊刪除我想從爲TreeView1刪除$回收站和$回收站內的文件,但我想C將留下不會被刪除。

所以在根我會看到C但C裏面將沒有什麼,因爲我只刪除$回收站 如果我點擊C,並刪除,然後我想使treeView1.SelectedNode.Remove();這將刪除/刪除整個C節點。

問題是我如何才能從treeView1中刪除子節點和裏面的文件我的意思是說,我不會看到它,它不意味着我將它們從硬盤或我的FTP服務器中刪除我只是不想查看$回收站和treeView1中的文件。

+0

「刪除整個節點」是什麼意思?請解釋(或附上圖片),以顯示預期的結果。 – Blachshma

+1

使用節點的OnClick事件,將其設置爲選中狀態,然後刪除該節點,或者遍歷所有節點,直到它出現在有問題的節點上,然後將其刪除。至於刪除目錄並讓節點反映更改。您可以刪除節點,然後根據您用來構建樹視圖的方法首先重建它。 –

+0

你的問題沒有多大意義。如果你讓FTP服務器刪除一個目錄,那麼所有的文件和子目錄也應該被刪除。然後,當然,樹中的子節點也會被刪除。 –

回答

2

你必須引用父節點,它或者屬於TreeView控件,或SelectedNode的父節點:

if (treeView1.SelectedNode != null) { 
    if (treeView1.SelectedNode.Parent == null) { 
    treeView1.Nodes.Remove(treeView1.SelectedNode); 
    } else { 
    treeView1.SelectedNode.Parent.Nodes.Remove(treeView1.SelectedNode); 
    } 
} 
0

此方法從根節點搜索樹中的節點。

private TreeNode GetNodeByStringPath(TreeNode root, string path) 
    { 
     string[] pathArr = path.Split('/'); 
     if (pathArr.First() != root.Name) 
      return null; 
     TreeNode currentNode = root; 
     for (int i = 1; i < pathArr.Length &&currentNode!=null; i++) 
     { 
      int index = currentNode.Nodes.IndexOfKey(pathArr[i]); 
      currentNode = currentNode.Nodes[index]; 
     } 
     return currentNode; 
    } 

可以使用這樣的:

 string path = "a/b/c/d/e"; 
     TreeNode node = GetNodeByStringPath(treeView1.Nodes[0], path);