65.9K
CodeProject 正在变化。 阅读更多。
Home

分层树

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.25/5 (7投票s)

2008 年 12 月 24 日

CPOL

1分钟阅读

viewsIcon

63937

downloadIcon

3045

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。

© . All rights reserved.