分层树






3.25/5 (7投票s)
Rotem Sapir 编写的精彩而时尚的“树状图生成器”的更新版本。

引言
这是对 Rotem Sapir 编写的优秀且简单的树生成器的扩展。(TreeGenerator.aspx)
Using the Code
代码基础是在 Rotem Sapir 开发的代码之上构建的。但是,节点渲染方式已经更新。这个版本为每个节点添加了微妙的阴影效果,使其更具专业性。
它还提供了一种为每个节点指定背景颜色的功能。您可以根据组织树中的层级或其他地理或数据特定颜色(例如,如果您正在渲染一个层次图来显示销售百分比、下属人数等)来设计自己的节点着色逻辑。
现在,该代码支持节点的选择颜色,即,当用户在树中选择一个节点时,可以通过设置 _SelectedBoxFillColor
来更改该节点的选中颜色。
以下是使用 TreeGenerator 的示例客户端代码
public partial class MainForm : Form
{
private Color[] hierarchyNodeColor = { Color.FromArgb(26, 80, 160),
Color.FromArgb(35, 107, 215), Color.FromArgb(100, 152, 230),
Color.FromArgb(169, 198, 241), Color.FromArgb(178, 207, 250) };
private TreeBuilder myTree = null;
public MainForm()
{
InitializeComponent();
InitializeHierarchyTree();
}
public void InitializeHierarchyTree()
{
picHierarchyTree.Location = containerPanel.Location;
picHierarchyTree.Dock = DockStyle.Left;
picHierarchyTree.SizeMode = PictureBoxSizeMode.AutoSize;
containerPanel.AutoScroll = true;
LoadHierarchyControl();
}
public void LoadHierarchyControl()
{
myTree = new TreeBuilder(GetTreeData());
PaintHierarchyTree();
}
private void PaintHierarchyTree()
{
picHierarchyTree.Image = Image.FromStream(myTree.GenerateTree(-1, -1, "1",
System.Drawing.Imaging.ImageFormat.Bmp));
}
private TreeData.TreeDataTableDataTable GetTreeData()
{
TreeData.TreeDataTableDataTable dt = new TreeData.TreeDataTableDataTable();
dt.AddTreeDataTableRow("1", "", "Localhost", "This is your Local Server",
hierarchyNodeColor[0].ToArgb());
dt.AddTreeDataTableRow("2", "1", "Child 1", "This is the first child.",
hierarchyNodeColor[1].ToArgb());
dt.AddTreeDataTableRow("3", "1", "Child 2", "This is the second child.",
hierarchyNodeColor[2].ToArgb());
dt.AddTreeDataTableRow("4", "1", "Child 3", "This is the third child.",
hierarchyNodeColor[3].ToArgb());
dt.AddTreeDataTableRow("5", "2", "GrandChild 1", "This is the only Grandchild.",
hierarchyNodeColor[4].ToArgb());
for (int i = 6; i < 10; i++)
{
Random rand = new Random();
dt.AddTreeDataTableRow(i.ToString(), rand.Next(1, i).ToString(),
"GrandChild " + i.ToString(), "This is the only Grandchild.",
hierarchyNodeColor[4].ToArgb());
}
return dt;
}
private void picHierarchyTree_MouseClick(object sender, MouseEventArgs e)
{
// returns the XML node
XmlNode selectedNode = myTree.OnClick(e.X, e.Y);
PaintHierarchyTree();
}
}
}
关注点
虽然原始代码库很好,但其中存在一些冗余文件,并且添加阴影效果为整个代码带来了更专业的视觉效果,此外还删除了未使用的不必要的文件。
历史
第一个版本,基于 Rotem Sapir 编写的 TreeGenerator。