百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

.NET C# Winforms Gantt Chart 控件,助你轻松绘制甘特图!

liuian 2025-09-11 23:02 20 浏览

在项目管理的世界里,甘特图是不可或缺的工具。它不仅能帮助你直观地展示项目进度,还能有效地管理任务和资源。然而,找到一个既强大又易用的甘特图控件并不容易。今天,我们为你推荐一款颠覆性的工具——.NET C# Winforms Gantt Chart 控件,它将彻底改变你的项目管理方式!

先看个样式

官网

https://github.com/jakesee/ganttchart

为什么选择.NET C# Winforms Gantt Chart 控件?

1. 无需额外依赖,轻松上手

这款控件完全基于.NET Framework,无需任何额外的预先条件。只需下载最新的源代码并在Microsoft Visual Studio 2017中构建库,你就可以立即开始使用。

2. 强大的功能,满足多样需求

.NET C# Winforms Gantt Chart 控件支持多种时间单位(周、天、小时),并且可以自定义其他时间分辨率。它还提供了单任务、分组任务、前置/后置任务、拆分任务和标记资源等功能。此外,每个任务都有完成百分比属性,帮助你更好地跟踪进度。

3. 灵活的用户界面定制

通过各种鼠标事件,你可以直接在甘特图上自定义用户界面体验。默认的鼠标命令可以通过继承来覆盖,满足你的个性化需求。

4. 打印支持,完美呈现

打印功能尊重页面边距、方向和每页的多个页面设置,确保你的甘特图在纸质版上也能完美呈现。

5. 关键路径和浮动时间计算

控件能够自动确定关键路径和浮动时间,帮助你更好地进行项目规划和风险管理。

快速上手指南

创建甘特图并添加任务

public Form1()
{
    InitializeComponents();
    var manager = new ProjectManager();
    var task = new Task() { Name = "Hello World" };
    manager.Add(task);
    var chart = new Chart();
    chart.Init(manager);
    this.Controls.Add(chart);
    this.AutoScroll = true; // this is no longer required
}

常见任务操作

// 设置任务持续时间
_mManager.SetDuration(wake, 3);

// 组织任务,设置分组和前置任务
_mManager.Group(work, wake);
_mManager.Relate(wake, teeth);

// 分配资源
_mManager.Assign(wake, jake);

// 拆分任务
_mManager.Split(pack, new MyTask(_mManager), new MyTask(_mManager), 2);

// 设置工具提示
_mChart.SetToolTip(wake, string.Join(", ", _mManager.ResourcesOf(wake).Select(x => (x as MyResource).Name)));

自定义任务数据:为每个任务设置不同颜色

public partial class ExampleSimple : Form
{
    ProjectManager _mProject;

    public ExampleSimple()
    {
        InitializeComponent();
        _mProject = new ProjectManager();
        _mProject.Add(new Task() { Name = "New Task" });
        _mProject.Add(new ColoredTask() { Name = "Purple Task", Color = Color.Purple });
        _mProject.Add(new ColoredTask() { Name = "Gold Task", Color = Color.Gold });
        _mChart.Init(_mProject);

        // 自定义任务绘制行为
        _mChart.PaintTask += (s, e) =>
        {
            ColoredTask ctask = e.Task as ColoredTask;
            if (ctask != null)
            {
                var format = new TaskFormat();
                format = e.Format;
                format.BackFill = new SolidBrush(ctask.Color);
                e.Format = format;
            }
        };

        // 获取任务的自定义数据
        _mChart.TaskSelected += (s, e) =>
        {
            ColoredTask ctask = e.Task as ColoredTask;
            if (ctask != null)
            {
                MessageBox.Show("Selected " + ctask.Color.ToString());
            }
        };
    }
}

// 自定义任务类
public class ColoredTask : Task
{
    public ColoredTask() : base() {}
    public Color Color { get; set; }
}

注意

中文日期显示

// 设置简体中文
CultureInfo cultureSimplifiedChinese = new CultureInfo("zh-CN");
Thread.CurrentThread.CurrentCulture = cultureSimplifiedChinese;
Thread.CurrentThread.CurrentUICulture = cultureSimplifiedChinese;

当然你可以去修改___GetLabelFormat方法

private void ___GetLabelFormat(DateTime datetime, DateTime datetimeprev, out LabelFormat minor, out LabelFormat major)
{
    minor = new LabelFormat() { Text = string.Empty, Font = this.Font, Color = HeaderFormat.Color, Margin = 3, TextAlign = ChartTextAlign.MiddleCenter };
    major = new LabelFormat() { Text = string.Empty, Font = this.Font, Color = HeaderFormat.Color, Margin = 3, TextAlign = ChartTextAlign.MiddleLeft };

    System.Globalization.GregorianCalendar calendar = new System.Globalization.GregorianCalendar();
    switch (TimeResolution)
    {
        case TimeResolution.Week:
            minor.Text = calendar.GetWeekOfYear(datetime, System.Globalization.CalendarWeekRule.FirstFullWeek, DayOfWeek.Monday).ToString();
            if(datetime.Month != datetimeprev.Month) major.Text = datetime.ToString("MMMM");
            break;
        case TimeResolution.Hour:
            minor.Text = datetime.Hour.ToString();
            if (datetime.Day != datetimeprev.Day) major.Text = datetime.ToString("dd MMM yyyy");
            break;
        default: // case TimeResolution.Day: -- to implement other TimeResolutions, add to this function or listen to the the PaintTimeline event
            minor.Text = ShortDays[datetime.DayOfWeek]; // datetime.ToString("dddd").Substring(0, 1).ToUpper();
            if (datetime.DayOfWeek == DayOfWeek.Sunday) major.Text = datetime.ToString("dd MMM yyyy");
            break;
    }
}

许可证

这款控件项目基于MIT许可证发布,详情请参阅LICENSE.md。

立即下载,开启高效项目管理之旅!

不要再犹豫,立即下载.NET C# Winforms Gantt Chart 控件,体验前所未有的项目管理效率提升吧!更多信息请访问官方文档或博客。

相关推荐

哪些手机用鸿蒙系统(都什么手机能用鸿蒙系统)

截至目前,国内有以下几款手机品牌可以装鸿蒙系统:1.华为:华为Mate40系列、P40系列、Mate30系列、MatePadPro系列等。2.荣耀:荣耀V40、荣耀30系列、荣耀X10系列等...

手机u盘读不出来了怎么修复(手机u盘读取不出来)

1、手机不支持OTG功能,所以将U盘连接到手机后,手机无法识别U盘的内容,因此显示不了;这种情况只能换台支持OTG功能的手机来连接U盘才行。2、手机支持OTG功能,但是使用的OTG线质量有问题导致无法...

笔记本散热器买哪种好(笔记本散热器买哪种好贴吧)

散热器有十大品牌:九州风神、超频三,酷冷至尊Tt、AVC、思民、捷冷、安钛克Antec、安耐美Enermax、海盗船Corsair。能位列十大品牌,每一种的质量和功能都有保障。、目前网上销量最高的是九...

打印机驱动一直安装失败(打印机驱动一直安装失败怎么办)
打印机驱动一直安装失败(打印机驱动一直安装失败怎么办)

打印机驱动程序安装失败需要对电脑进行其他设置,详细步骤如下:1,在电脑桌面上找到【计算机】并用鼠标右击。2,右击后在出现的选项中找到【管理】选项并点击打开。3,接下里会进入到计算机控制台界面,在这里要根据自己的电脑选择64位或者32位,选择...

2026-01-14 12:55 liuian

ctrl加谁是截图(ctrl和什么键可以截图)

第一种:Ctrl+PrScrn使用这个组合键截屏,获得的是整个屏幕的图片第二种:Alt+PrScrn这个组合键截屏,获得的结果是当前窗口的图片第三种:打开qq,使用快捷键Ctrl+...

技嘉主板bios设置启动顺序(技嘉主板bios设置启动顺序怎么设置)

启动顺序设置方法如下:1、重启电脑连续按[DEL]键进入BIOS设置,按DEL进入BIOS设置。2、按键盘方向键右键切换到BOOT选项,将windows10功能设置为"其它操作系统"...

目前台式电脑主机怎么选(台式主机选择)
目前台式电脑主机怎么选(台式主机选择)

每个人对电脑的性需要不同,因此根据自己家的家庭需要,选择合适的电脑即可。以下简单说明:1,双核处理器+2G内存+集成显卡+机械硬盘。性能满足上网、看电影、聊天、办公、玩象棋之类的小游戏。价格在2000以内可以买到;2,四核处理器+4G内存+...

2026-01-14 12:05 liuian

台式电脑如何用u盘重装系统(台式电脑如何用u盘重装系统应用)

1、重启电脑并进入BIOS;2、在BIOS中设置启动顺序,优先从U盘启动;3、从U盘启动,进入安装界面;4、选择安装语言、时区和键盘设置;5、选择安装方式,一般选择“清除整个硬盘并安装”;6、配置分区...

宏基笔记本电脑怎么恢复出厂设置
  • 宏基笔记本电脑怎么恢复出厂设置
  • 宏基笔记本电脑怎么恢复出厂设置
  • 宏基笔记本电脑怎么恢复出厂设置
  • 宏基笔记本电脑怎么恢复出厂设置
stop0x0000007b蓝屏(stop0X0000007b蓝屏,修改注册表)
stop0x0000007b蓝屏(stop0X0000007b蓝屏,修改注册表)

步骤/方式1将电脑送到当地的维修店步骤/方式2然后将师傅维修一下蓝屏的问题当电脑启动蓝屏出现错误代码0x0000007b时,首先我们将电脑重启,在开机时不停按启动热键进入到bios设置页面,进入页面后找到“IntegratedPeriphe...

2026-01-14 11:21 liuian

电脑开机安全模式也进不去(电脑开机安全模式也进不去桌面)
  • 电脑开机安全模式也进不去(电脑开机安全模式也进不去桌面)
  • 电脑开机安全模式也进不去(电脑开机安全模式也进不去桌面)
  • 电脑开机安全模式也进不去(电脑开机安全模式也进不去桌面)
  • 电脑开机安全模式也进不去(电脑开机安全模式也进不去桌面)
怎样设置默认打印机(打印机设置彩色打印在哪里设置)

步骤如下:1.单击Windows“开始”菜单,指向“设置”,单击“打印机”,打开“打印机”窗口。2.右键单击打印机图标,系统弹出快速菜单,单击其中的“设为默认值”。如果“打印机”窗口没有当前使用的打印...

机械硬盘坏了能修吗(机械硬盘损坏可以修复吗)

硬盘修复是很多人都可能会面临的难关。硬盘是计算机上最重要的组成部分,是计算机上的数据存储设备,因此一旦硬盘发生故障,用户很可能会丢失所有数据。况且硬盘是机械设备,有一定的使用寿命,长时间使用出现故障...

win7正版怎么下载(我告诉你怎么下载win7)

如题,题主想在红警之家下载红警,很简单,可以用迅雷下载软件下载,下载以后用解压软件解压就行了,但是红警这款软件在winxp系统下,是最理想的,7系统下面会出现闪退的情况。下载很容易的,闪退的时候,设置...

电脑关机脚本bat命令(win10关机bat脚本)

bat关机命令需要使用文本文档。使用文本文档制作bat关机命令步骤如下所示:1、在电脑桌面空白处点击鼠标右键。2、在鼠标右键菜单中,选择新建文本文档。3、点击打开文本文档。4、在新建文本文档中输入关机...