private void treeView1_MouseClick(object sender, MouseEventArgs e)
{
// Get the node that was clicked
TreeNode selectedNode = treeView1.HitTest(e.Location).Node;
if (selectedNode != null)
{
}
}
如果我有一个根节点:
World
当我点击它时,我看到了这些节点:
World
|____ Blue
|____ Green
|____ Red
|____ Black
|____ yellow
如果我点击 Blue ,我会在 Blue 下看到更多节点,例如
World
|____ Blue
| |____ Day
| |____ Night
|____ Green
|____ Red
|____ Black
|____ yellow
现在,如果我点击蓝色,我将获得所选节点名称蓝色。 selectedNode.Name
将蓝色
如果我点击日将进入selectedNode.Name
日
但我想要做的是,如果我点击 Day ,selectedNode
即可
Blue \ Day 或 BlueDay
如果在 Day 下有另一个节点名 1 ,我点击 1 ,所以 selectedNode.Name 我想看 BlueDay1 或者我更喜欢 Blue \ Day \ 1
我想要这个\\
所以我可以将它用作目录名。
问题是我使用selectedNode.Name
作为目录来获取文件:
List<string> ff = new List<string>();
private void treeView1_MouseClick(object sender, MouseEventArgs e)
{
TreeNode selectedNode = treeView1.HitTest(e.Location).Node;
if (selectedNode != null)
{
string tt = mainPath + "\\" + selectedNode.Text;
ff = DirSearch(tt);
timer1.Enabled = true;
}
}
如果我点击Blue然后就可以了,它将获得Blue下的所有文件,包括子目录。但是,如果我点击1并且有1个文件,那么它将不会获得任何文件,因为我需要完整的路径名 Blue \ Day \ 1 以从1获取文件。
这就是我获取文件的方式
static List<string> DirSearch(string sDir)
{
List<string> files = new List<string>();
try
{
foreach (string d in Directory.GetDirectories(sDir))
{
foreach (string f in Directory.GetFiles(d))
{
files.Add(f);
}
DirSearch(d);
}
}
catch (System.Exception excpt)
{
Console.WriteLine(excpt.Message);
}
return files;
}
我的想法是,如果我想获取蓝色下的所有文件我点击蓝色但是如果我想在1中点击1时只获得1中的文件它不起作用,因为1不是完整路径。
答案 0 :(得分:1)
每个TreeNode
都有一个FullPath
,它获取从根树节点到当前树节点的路径。例如,您可以看到树的所有节点的完整路径,如下面的树:
Tree Full Path
==============================
1 1
|__ 11 1\11
|__ 111 1\11\111
|__ 112 1\11\112
TreeView
有一个PathSeparator
字符,用于获取或设置树节点路径使用的分隔符字符串,默认为\
。
如果您希望更好地控制路径,可以使用Ancestors
或AncestorsAndSelf
扩展方法。
在我下面提供的示例中,我创建了没有根节点的路径:
var pathWithoutRootNode = string.Join(@"\",
e.Node.AncestorsAndSelf().Where(x => x.Parent != null).Select(x => x.Text))