基本原理:
1. 从下往上计算位置
2. 模仿Word中组织结构图的特点
调用代码:
Tree<string> tree = new Tree<string>(null, "董事会");
tree.Add("北京公司");
tree.Add("董事秘书室特殊机构");
tree.Add("上海公司");
tree.Childs[0].Add("总经理办公室");
tree.Childs[0].Add("财务部");
tree.Childs[0].Add("销售部");
tree.Childs[2].Add("上海销售部");
Bitmap bmp = tree.DrawAsImage();
实现代码:
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
namespace Test
{
/// <summary>
/// 用来输出组织结构图的类
/// </summary>
/// <typeparam name="T"></typeparam>
public class Tree<T>
{
Tree<T> _Parent = null;
T _Content;
List<Tree<T>> _Childs = new List<Tree<T>>();
SizeF _Size;
Rectangle _Rec;
public Tree(Tree<T> parent, T content)
{
_Parent = parent;
_Content = content;
}
public Tree<T> Add(T content)
{
Tree<T> tree = new Tree<T>(this, content);
_Childs.Add(tree);
return tree;
}
public Tree<T> Parent { get { return _Parent; } }
public T Content { get { return _Content; } }
public List<Tree<T>> Childs { get { return _Childs; } }
public SizeF Size { get { return _Size; } set { _Size = value; } }
public Rectangle Rec { get { return _Rec; } set { _Rec = value; } }
void MeatureAllSize(Graphics g, Font font, int addWidth)
{
_Size = g.MeasureString(_Content.ToString(), font);
_Size.Width += addWidth;
foreach (Tree<T> tree in Childs)
tree.MeatureAllSize(g, font, addWidth);
&n