Posts Tagged ‘Gantt’
用 C# 编写 Gantt 控件
星期四, 八月 16, 2007 23:53 No Comments由于近期公司项目的需要,考虑使用C#来实现Gantt控件。示意图如下(明天补上)。
观察示意图,我们可以发现Gantt图控件主要由三部分组成。日期栏、条目和连接线。我们分别加以处理,首先是显示背景的日期栏。我最初的想法是尽量用标准的.Net控件来实现,第一个找到的是TableLayout,感觉应该很合适,使用Label填充对应的栏位,即可实现。试验结果是刷新很严重。即使采用DoubleBuffer处理也不起什么作用。怒,决意自行绘制表格,遂以Panel替换之。结果出乎想象,使用居然DoubleBuffer来绘制感觉不到闪烁。代码如下:
需要源码的同学请留言
窃喜中……开始绘制条目项,简单使用Label即可。代码如下,不做说明。
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
base.OnPaint(e);
Graphics g = e.Graphics;
SolidBrush brush = new SolidBrush(base.ForeColor);
StringFormat format = new StringFormat();
format.Alignment = StringAlignment.Center;
format.LineAlignment = StringAlignment.Center;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
g.FillRectangle(brush, 0, 0, base.Width, base.Height / 2);
g.FillPolygon(brush, new Point[] {new Point(0, base.Height / 2),
new Point(6, base.Height), new Point(12, base.Height / 2)});
g.FillPolygon(brush, new Point[] {new Point(base.Width - 12, base.Height / 2),
new Point(base.Width - 6, base.Height), [...]