我幾乎已經掌握了它,但我很難優雅地完成最後一部分。這個答案是根據Jeremy Thompson提交的答案進行更新的。這是我到目前爲止:從程序集動態生成WinForms TreeView
public void SetupTree()
{
var types = Assembly.Load("Data").GetTypes().Where(t => t.IsPublic && t.IsClass);
if (types.Count() > 0)
{
if (treeView_left.Nodes.Count == 0)
{
treeView_left.Nodes.Add(new TreeNode("Structure Data"));
treeView_left.Nodes[0].Nodes.Add(types.First().GetHashCode().ToString(), types.First().Name);
}
foreach (Type type in types)
{
BuildTree(types, type, treeView_left.Nodes[0].Nodes[0]);
}
}
treeView_left.Refresh();
}
private void BuildTree(IEnumerable<Type> types, Type type, TreeNode parentNode)
{
var tempNodes = treeView_left.Nodes.Find(type.BaseType.GetHashCode().ToString(), true);
if (tempNodes.Count() > 0)
{
parentNode = tempNodes[0];
if (tempNodes.Count() != 1)
{
//TODO: warning
}
}
if (parentNode != null)
{
if (treeView_left.Nodes.Find(type.GetHashCode().ToString(), true).Count() == 0)
{
parentNode.Nodes.Add(type.GetHashCode().ToString(), type.Name);
}
foreach (Type t in types.Where(x => x.IsSubclassOf(type)))
{
BuildTree(types, t, parentNode.Nodes[type.GetHashCode().ToString()]);
}
}
}
這產生了我期待的結果,但我懷疑我正在做一些這種尷尬。如果任何人都能指出最後一部分的更清潔的方法,我會認識它。
你的方法需要快速響應 – 2013-02-28 01:00:29
我一直在努力弄清楚這樣的事情的最佳地點,我要麼終止跨越我希望這種方法使用的一般性質,或者它不會放置任何東西 – 2013-02-28 01:04:37
我正在工作在它上面 – 2013-02-28 01:05:46