C# 通过获取文件路径来安排TreeView?
我有以下代码:C# 通过获取文件路径来安排TreeView?,c#,.net,winforms,treeview,treenode,C#,.net,Winforms,Treeview,Treenode,我有以下代码: public void AddNode(string Node) { try { treeView.Nodes.Add(Node); treeView.Refresh(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); }
public void AddNode(string Node)
{
try
{
treeView.Nodes.Add(Node);
treeView.Refresh();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
正如您所看到的非常简单,此方法获取文件路径。比如C:\Windows\notepad.exe
现在我想让树视图像文件系统一样显示它
-C:\
+Windows
如果我点击“+”它会变成这样:
-C:\
-Windows
notepad.exe
下面是我现在通过将这些路径发送到上述方法得到的信息:
如何才能使它安排节点?如果您在windows窗体中(我想是这样),您可以实现
IComparer
类并使用以下属性:
public class NodeSorter : IComparer
{
// Compare the length of the strings, or the strings
// themselves, if they are the same length.
public int Compare(object x, object y)
{
TreeNode tx = x as TreeNode;
TreeNode ty = y as TreeNode;
// Compare the length of the strings, returning the difference.
if (tx.Text.Length != ty.Text.Length)
return tx.Text.Length - ty.Text.Length;
// If they are the same length, call Compare.
return string.Compare(tx.Text, ty.Text);
}
}
问题是父母和孩子没有被区分开来吗 树中的每个节点都有一个nodes属性,该属性表示其子节点的集合。需要更改AddNode例程,以便指定要向其添加子节点的父节点。比如:
TreeNode parent = //some node
parent.Nodes.Add(newChildNode);
如果您想让它只填充路径并计算出父子关系本身,则必须编写一些代码来解析路径,并根据路径段识别父节点。如果我是您,我会将输入字符串拆分为子字符串,使用该方法,然后搜索正确的节点以插入节点的相关部分。我的意思是,在添加节点之前,应该检查节点C:\及其子节点(Windows)是否存在 这是我的密码:
...
AddString(@"C:\Windows\Notepad.exe");
AddString(@"C:\Windows\TestFolder\test.exe");
AddString(@"C:\Program Files");
AddString(@"C:\Program Files\Microsoft");
AddString(@"C:\test.exe");
...
private void AddString(string name) {
string[] names = name.Split(new char[] { '\\' }, StringSplitOptions.RemoveEmptyEntries);
TreeNode node = null;
for(int i = 0; i < names.Length; i++) {
TreeNodeCollection nodes = node == null? treeView1.Nodes: node.Nodes;
node = FindNode(nodes, names[i]);
if(node == null)
node = nodes.Add(names[i]);
}
}
private TreeNode FindNode(TreeNodeCollection nodes, string p) {
for(int i = 0; i < nodes.Count; i++)
if(nodes[i].Text.ToLower(CultureInfo.CurrentCulture) == p.ToLower(CultureInfo.CurrentCulture))
return nodes[i];
return null;
}
。。。
AddString(@“C:\Windows\Notepad.exe”);
AddString(@“C:\Windows\TestFolder\test.exe”);
AddString(@“C:\ProgramFiles”);
AddString(@“C:\Program Files\Microsoft”);
AddString(@“C:\test.exe”);
...
私有void AddString(字符串名称){
string[]names=name.Split(新字符[]{'\\'},StringSplitOptions.RemoveEmptyEntries);
TreeNode=null;
for(int i=0;i
试着看看这个。它应该完全符合您的要求。\1我相信您的示例中的电影是您自己的,对吗#2是否将所有节点添加到根节点#嘿,谢谢!我发现了这些:但你给了我最好的答案!