一棵用来管理文件的树,由两个类组成:
目录类public class Directory
{
string strDirectoryID;
string strParentID;
List<Directory>;
List<Document>; public Directory SeekDirectoryByID(string ID)
{
???
}
public Document SeekDocumentByID(string ID)
{
???
}
}文件类public class Document
{
string strDocumentID;
string strParentID;
}Directory里带问号的那两个方法,如何写?
必须把List<>里的对象直接返回来,不能赋给新的对象,因为要进行修改、删除等操作。
目录类public class Directory
{
string strDirectoryID;
string strParentID;
List<Directory>;
List<Document>; public Directory SeekDirectoryByID(string ID)
{
???
}
public Document SeekDocumentByID(string ID)
{
???
}
}文件类public class Document
{
string strDocumentID;
string strParentID;
}Directory里带问号的那两个方法,如何写?
必须把List<>里的对象直接返回来,不能赋给新的对象,因为要进行修改、删除等操作。
SeekDocumentByID也是一样,
如果从根结点直接查找的话,子目录下的任何东西是不可能直接找到的。
public Directory SeekSubDirectoryByID(string id)
{
if (this.subDirectory.Count > 0)
{
foreach (Directory currentDirectory in this.subDirectory)
{
if (currentDirectory.ID == id)
{
return currentDirectory;
}
else
{
return currentDirectory.SeekSubDirectoryByID(id);
}
}
}
else
{
return null;
}
}
{
if (this.strDirectoryID == ID)
{
return this;
} if (directories.Count <= 0)
{
return null;
} Directory currentDirectory;
Directory searchResult;
for (int i = 0; i < directories.Count; i++)
{
currentDirectory = directories[i];
searchResult = currentDirectory.SeekDirectoryByID(ID);
if (searchResult != null) break;
} return searchResult }
{
string strDirectoryID;
string strParentID;
List<Directory> directories = new List<Directory>();
List<Document> documents = new List<Document>();
public Directory(string id, string pid)
{
strDirectoryID = id;
strParentID = pid;
}
public void addToList(Directory d)
{
directories.Add(d);
} public String toString()
{
return (strDirectoryID + " " + strParentID);
} public Directory SeekDirectoryByID(string ID)
{
Console.WriteLine("in SeekDir, " + strDirectoryID);
if (this.strDirectoryID == ID)
{
return this;
} if (directories.Count <= 0)
{
return null;
} Directory currentDirectory;
Directory searchResult = null;
for (int i = 0; i < directories.Count; i++)
{
currentDirectory = directories[i];
searchResult = currentDirectory.SeekDirectoryByID(ID);
if (searchResult != null) break;
} return searchResult; }
public Document SeekDocumentByID(string ID)
{
return new Document();
}
}
public class Document
{
string strDocumentID;
string strParentID;
}
以下是测试代码:
static void findTree()
{
Directory d = new Directory(".","..");
Directory d1_1 = new Directory("A1", ".");
Directory result;
d.addToList(d1_1);
d1_1 = new Directory("A2", ".");
d.addToList(d1_1); result = d.SeekDirectoryByID(".");
Console.WriteLine(result.toString()); result = d.SeekDirectoryByID("A1");
Console.WriteLine(result.toString()); result = d.SeekDirectoryByID("A2");
Console.WriteLine(result.toString());
result = d.SeekDirectoryByID("A3");
}SeekDocument 同理啊, 不帮你写了.
这里有个我写的遍历树节点的方法,LZ看看对你有用不://接收TreeView对象
public void search(TreeView n)
{
//查看是否有子节点
if(n.Nodes.Count == 0)
{
MessageBox.Show("没有节点");
}
else
{
//遍历本层所有子节点
for(int i = 0;(i < n.Nodes.Count)&&this.textBox1.Text == "" ; i++)
{
//调用查找方法
this.textBox1.Text = searchN(n.Nodes[i]);
}
}
}//查找方法,接受节点对象
public string searchN(TreeNode n)
{
if(n.IsSelected)
{
return n.Text;
}
else if(n.Nodes.Count == 0)
{
return "";
}
else
{
//递归查找本层节点子节点
for(int i = 0;i < n.Nodes.Count; i++)
{
string text = searchN(n.Nodes[i]);
if(text != "")
return text;
else
continue;
}
return "";
}
}