# ganttchart **Repository Path**: corbyn/ganttchart ## Basic Information - **Project Name**: ganttchart - **Description**: The Winforms Gantt Chart is the .NET Winforms control originally hosted on CodePlex (http://ganttchart.codeplex.com) - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 4 - **Created**: 2022-05-14 - **Last Updated**: 2022-05-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ![](http://img.shields.io/badge/project%20status-stable%20and%20respond%20to%20queries-green.svg?style=flat) ![](http://img.shields.io/badge/license-MIT-red.svg?style=flat) # .NET C# Winforms Gantt Chart Control This .NET class library project provides a C# Winforms UserControl that draws a gantt chart using native GDI+. ## Getting Started The project is written with Microsoft Visual Studio 2017, simply download the latest source code from the master branch and build the library with the IDE. ### Prerequisites No pre-requisites other than the .NET Framework. ### Installing The project builds into a class library with example applications. ## Running the tests The source code includes a test project GanttChartTests which you can load and run within Microsoft Visual Studio 2017 from the test menu. ## Features * Support time units Weeks, Days (default), Hours out-of-the-box, can be modified to support other time resolutions. * Single tasks, grouped tasks, precedent/dependant tasks, split tasks, tagged resources * Printing respects page margin, orientation and multiple pages per page * Percentage complete property for each task * Various mouse events for customising UI experience directly on the chart. * Comes with default mouse commands that can be overridden through inheritance. * Determines critical path and slack # Documentation Jump directly to the [doxygen documentation](http://www.jakesee.com/docs/ganttchart), or visit my [blog](http://www.jakesee.com/net-c-winforms-gantt-chart-control/) for more information. (Please make sure you are reading the updated versions while I try to keep up, thanks.) ![](http://www.jakesee.com/codeplex/ganttchart.jpg) ## Basic Usage ### Create Chart and Adding Tasks public Form1() { InitializeComponents(); var manager = new ProjectManager(); var task = new Task() { Name = "Hello World" }; manager.Add(task); var chart = new Chart(); chart.Init(manage); this.Controls.Add(chart); this.AutoScroll = true; // this is no longer required } ### Common Task Manipulation You can manipulate the task through code using various methods in the ProjectManager: // Set task durations _mManager.SetDuration(wake, 3); // Give the Tasks some organisation, setting group and // precedents e.g. make "wake" task a subtask under "work" _mManager.Group(work, wake); // Setting task dependencies e.g. make "wake" task a precedent of "brush teeth" task _mManager.Relate(wake, teeth); // Assigning Resources e.g. add "jake" resource to "wake" task _mManager.Assign(wake, jake); // splitting a tasks e.g. split the "pack up" task into 2 new tasks _mManager.Split(pack, new MyTask(_mManager), new MyTask(_mManager), 2); // set some tooltips to show the resources in each task // e.g. set a tooltip on the "wake" task _mChart.SetToolTip(wake, string.Join(", ", _mManager.ResourcesOf(wake).Select(x => (x as MyResource).Name))); ### Custom Task Data: Different colors for every tasks You can change the default task appearance for all task, or as in here change individual task color as a demo for adding custom business data to tasks. 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); // Custom behavior on paint task _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; } }; // Grab custom data for tasks _mChart.TaskSelected += (s, e) => { ColoredTask ctask = e.Task as ColoredTask; if (ctask != null) { MessageBox.Show("Selected " + ctask.Color.ToString()); } }; } } // Custom task with business data public class ColoredTask : Task { public ColoredTask() : base() {} public Color Color { get; set; } } ## License This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details