- 浏览: 436727 次
- 性别:
- 来自: 唐山
文章分类
最新评论
-
hautbbs:
谢谢分享!
ASP.NET 导出Excel 和csv -
hautbbs:
感谢分享!
ASP.NET 导出Excel乱码的终极解决 -
wyf:
zcl920 写道只能说 看不懂。要发就发全 取一段出来 有什 ...
图片上绘制文字换行处理 -
zcl920:
只能说 看不懂。要发就发全 取一段出来 有什么用。
图片上绘制文字换行处理 -
380086154:
有用,谢谢。
js比较日期
//基本原理: // 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); } List<List<Tree<T>>> GetTreeLayers() { List<List<Tree<T>>> layers = new List<List<Tree<T>>>(); GetTreeLayers(layers, new List<Tree<T>>(new Tree<T>[] { this }), 0); return layers; } void GetTreeLayers(List<List<Tree<T>>> layers, List<Tree<T>> childs, int level) { if (childs.Count == 0) return; if (layers.Count <= level) layers.Add(new List<Tree<T>>()); for (int i = 0; i < childs.Count; i++) { layers[level].Add(childs[i]); GetTreeLayers(layers, childs[i].Childs, level + 1); } } /// <summary> /// 设置显示区域(从最后一层最左开始) /// </summary> /// <param name="level"></param> /// <param name="height"></param> /// <param name="interval"></param> /// <param name="left"></param> void SetRectangle(int level, int height, int hInterval, int vInterval, int left) { int index = 0; if (Parent != null) index = Parent.Childs.IndexOf(this); if (Childs.Count == 0) { // 没有儿子,就向前靠 if (left > 0) left += hInterval; } else { // 有儿子,就在儿子中间 int centerX = (Childs[0].Rec.Left + Childs[Childs.Count - 1].Rec.Right) / 2; left = centerX - (int)_Size.Width / 2; // 并且不能和前面的重复,如果重复,联同子孙和子孙的右边节点右移 if (Parent != null && index > 0) { int ex = (Parent.Childs[index - 1].Rec.Right + hInterval) - left; if (index > 0 && ex > 0) { for (int i = index; i < Parent.Childs.Count; i++) Parent.Childs[i].RightChilds(ex); left += ex; } } } _Rec = new Rectangle(left, (height + vInterval) * level, (int)_Size.Width, height); } /// <summary> /// 所有子孙向右平移 /// </summary> /// <param name="ex"></param> void RightChilds(int ex) { Rectangle rec; for (int i = 0; i < _Childs.Count; i++) { rec = _Childs[i].Rec; rec.Offset(ex, 0); _Childs[i].Rec = rec; _Childs[i].RightChilds(ex); } } void Offset(int x, int y) { _Rec.Offset(x, y); for (int i = 0; i < _Childs.Count; i++) _Childs[i].Offset(x, y); } public Bitmap DrawAsImage() { return DrawAsImage(Pens.Black, new Font("宋体", 10.5f), 26, 20, 5, 20, 26); } public Bitmap DrawAsImage(Pen pen, Font font, int h, int horPadding, int horInterval, int verInterval, int borderWidth) { Bitmap bmp = new Bitmap(1, 1); Graphics g = Graphics.FromImage(bmp); // 把树扁平化 List<List<Tree<T>>> layers = GetTreeLayers(); // 算出每个单元的大小 MeatureAllSize(g, font, horPadding); g.Dispose(); bmp.Dispose(); // 从最后一层开始排列 int left = 0; for (int i = layers.Count - 1; i >= 0; i--) { for (int j = 0; j < layers[i].Count; j++) { layers[i][j].SetRectangle(i, h, horInterval, verInterval, left); left = layers[i][j].Rec.Right; } } Offset(borderWidth, borderWidth); // 获取画布需要的大小 int maxHeight = (h + verInterval) * layers.Count - verInterval + borderWidth * 2; int maxWidth = 0; for (int i = layers.Count - 1; i >= 0; i--) { for (int j = 0; j < layers[i].Count; j++) { if (layers[i][j].Rec.Right > maxWidth) maxWidth = layers[i][j].Rec.Right; } } maxWidth += borderWidth; // 边宽 // 画 bmp = new Bitmap(maxWidth, maxHeight); g = Graphics.FromImage(bmp); g.Clear(Color.White); StringFormat format = (StringFormat)StringFormat.GenericDefault.Clone(); format.Alignment = StringAlignment.Center; format.LineAlignment = StringAlignment.Center; Rectangle rec, recParent; for (int i = 0; i < layers.Count; i++) { for (int j = 0; j < layers[i].Count; j++) { // 画字 rec = (Rectangle)layers[i][j].Rec; g.DrawRectangle(pen, rec); g.DrawString(layers[i][j].Content.ToString(), font, new SolidBrush(pen.Color), rec, format); // 画到父亲的线 if (layers[i][j].Parent != null) { recParent = layers[i][j].Parent.Rec; g.DrawLine(pen, rec.Left + rec.Width / 2, rec.Top, rec.Left + rec.Width / 2, rec.Top - verInterval / 2); g.DrawLine(pen, recParent.Left + recParent.Width / 2, recParent.Bottom, recParent.Left + recParent.Width / 2, rec.Top - verInterval / 2); g.DrawLine(pen, rec.Left + rec.Width / 2, rec.Top - verInterval / 2, recParent.Left + recParent.Width / 2, rec.Top - verInterval / 2); } } } g.Flush(); g.Dispose(); return bmp; } } } 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ssdjmcj8048/archive/2007/12/11/1929658.aspx
发表评论
-
登录时记住用户名密码的实现方式
2019-06-12 15:11 3039登录的时候记住用户 ... -
CAS 实现单点登录 .NET MVC
2016-05-24 17:14 1133http://www.cnblogs.com/woxpp/p ... -
.NET开发邮件发送功能的全面教程(含邮件组件源码)
2015-03-31 09:43 1174原文地址:http://www.cnblogs.com/he ... -
开发Web组合
2015-01-04 11:39 6141、数据库操作 ORM-Dapper 2、前台界面布局采 ... -
基于 Bootstrap 构建的网站
2014-12-14 14:12 640文档,下载地址:http://v3.bootcss.com ... -
iis8 默认不支持svc解决方法
2014-09-18 18:57 782以下内容对于使用WIN2012 部署V9的时候使用。 ... -
C# 连接Oracle(利用ODP.net,不安装oracle客户端)
2014-07-11 09:37 1698C# 连接Oracle(利用ODP.net,不安装oracl ... -
C# Attribute 特性,过期特性
2014-05-27 15:18 1852通过下列过程将属性应用到代码元素。 通过从 .NE ... -
.NET画实时直方图
2011-12-30 09:37 922using System; using System.Col ... -
设置combobx选中项
2011-12-21 15:20 1036cbRole.SelectedIndex = cbRole.I ... -
文档树状结构化目录管理方法
2011-12-20 09:50 2199本文适用于附件(各类文档、图片和压缩包等,下同)比较多的 ... -
.StringTemplate替换模板
2011-11-03 10:19 1251官方下载 www.StringTemplate. ... -
WCF-IErrorHandler
2011-10-11 16:30 1058使用 IErrorHandler 接口,我们可以更深入地 ... -
ADODB.Stream instead of Scripting.FileSystemObject.
2011-07-04 08:55 1247In a Silverlight 4 OOB App (eve ... -
Scripting.FileSystemObject对象的详细技巧指南
2011-07-03 23:39 1052Scripting.FileSystemObject对象的 ... -
Stream 和 byte[] 之间的转换
2011-07-02 16:52 1078/* - - - - - - - - - - - - - ... -
常用正则表达式
2011-06-15 20:17 798正则表达式用于字符 ... -
DynamicMethod 类
2011-05-11 22:51 1165public delegate String MyMetho ... -
一个通用的快速反射方法(A General Fast Method Invoker)
2011-04-13 22:01 1530普通反射方法 MethodInfo methodIn ... -
C#操作IIS(转)可以写一个工具自己配置网站
2011-03-24 21:08 2271using System; using System.Dir ...
相关推荐
在C#编程中,组织结构图(Organizational Chart)是一种用于表示公司、团队或项目中人员及职责层次关系的图表。这种图表通常采用层级结构,从最高级别的管理者开始,逐级向下展示每个职位及其下属。在本文中,我们将...
C# Drawing x组织结构图C# Drawing x组织结构图
1. 添加图形界面(GUI)支持,利用WPF或WinForms库创建用户友好的界面展示组织结构图。 2. 支持拖放操作,允许用户通过拖放调整节点的位置和关系。 3. 引入权限管理,限制用户对组织结构的查看和编辑权限。 4. 实现...
本主题聚焦于“C#动态生成组织机构图”,这是一个非常实用的技术,它允许开发者根据实际需求,自动生成表示组织结构的图形化展示。下面我们将深入探讨这个知识点。 首先,组织机构图(Organization Chart)是表示...
本项目涉及的是一个基于C#的WinForms应用程序,使用Visual Studio 2012作为开发工具,设计了一个可拖拽的树结构,这通常被用于表示组织架构图或家族谱。这种交互式图形界面允许用户通过鼠标操作来重新排列节点,增加...
总结来说,“DOTNET组织结构图控件源码”是一个实用的工具,它结合了C#语言和.NET框架的优势,提供了组织结构图的绘制和管理功能。开发者可以利用它快速构建组织管理应用,同时也能从源码学习中受益,提升自身技能。
在Windows Forms(WinForm)开发中,创建组织结构图是一种常见的需求,特别是在企业级应用中,用于展示员工、部门或项目之间的层次关系。本资源提供的是一个基于Vb.net实现的WinForm组织结构图源码,它可以帮助...
在C#编程中,树形结构是一种常见的数据结构,它模拟了自然界中的树状关系,如文件系统、组织架构或阶层关系等。本篇将详细探讨如何使用递归方法来实现C#中的树形结构。 首先,理解树形结构的基本概念至关重要。在...
本项目"CSWinFormTreeViewLoad"是针对Windows Forms应用的一个实例,展示了如何用C#实现一个树状目录图。以下是关于这个项目及其相关知识点的详细说明: 1. **Windows Forms中的TreeView控件**:`TreeView`控件允许...
数据结构是计算机科学中至关重要的一个领域,它研究如何有效地组织和存储数据,以便于高效地访问和修改。C#是一种面向对象的编程语言,它提供了丰富的特性和库支持来实现各种数据结构。在这个C#语言版的数据结构教程...
数据结构是计算机科学中的核心概念,它涉及到如何在内存中有效地组织和管理数据,以便进行高效的操作。C#是一种广泛使用的编程语言,尤其在开发Windows应用程序、游戏、Web服务以及.NET框架下的各种软件时,其强大的...
从第2章到第6章,依次深入探讨线性表、栈和队列、串和数组、树型结构和图结构,每种数据结构均配以C#代码实现,并介绍.NET框架中相应的数据结构。最后两章则聚焦于排序和查找算法,包括.NET框架中的实现。 #### ...
- **数据结构基础**:数据结构是计算机科学中用于组织和存储数据的一种方式,它直接影响到算法的效率和程序的复杂度。常见的数据结构包括数组、链表、栈、队列、树和图等。通过合理的数据结构设计,可以优化算法性能...
2. **第二章至第六章**:分别讨论了线性表、栈和队列、字符串和数组、树形结构和图结构等常用的数据结构及其应用,同时介绍了.NET框架中相关的数据结构。 3. **第七章和第八章**:讨论了排序和查找的各种方法及其...
通过研究和实践这个示例,你可以更深入地理解C#中树形结构的创建和操作。 总的来说,C#的TreeView控件是实现层次化数据显示的强大工具。通过熟练掌握其API和事件机制,开发者能够创建出用户友好且功能丰富的界面,...
1. 数据结构概述:数据结构是存储和组织数据的方式,包括线性结构(如数组、链表)、树形结构(如二叉树、堆)、图形结构以及散列结构等。掌握数据结构对于编写高效的算法至关重要。 2. C#基础:C#是微软开发的一种...