どのようにガントコントロールカスタム描画?DevExpress社のWinformsヘルプあなたは忙しいです

DevExpress社のWinformsコントロールは  、140の以上のUIコントロールやライブラリを構築し、ビルド完璧と滑らかな、美しく、使いやすいアプリケーションに。それはオフィススタイルのインターフェースである、あるいは大量に処理するビジネスデータを分析するかどうか、DevExpress社のWinFormsは簡単に仕事をすることができます。DevExpress社は、広くビジネス/政府の情報管理の座席のために重要な位置を占め、ECMのエンタープライズコンテンツ管理、コスト管理、プロセスの監視、生産スケジューリングに使用されています。

適用範囲:デスクトップのすべての種類、Webアプリケーション開発、特にWinFormsのアプリケーション開発。

フルバージョンの試用版のダウンロードDevExpress社v19.2クリック

最近DevExpress社のv19.2でリリースでは、DevExpress社のWinFormsガントコントロールは公式コミュニティテクノロジプレビュー(CTP)としてリリースされました!バージョンからバージョンv20.1の将来に、技術チームは、あなたは素晴らしいユーザー体験を提供するために、書き込みコードする必要はありませんので、このコントロールを改善し、拡張します!この記事では、ガントチャートに関連する主な機能をシミュレートするCustomDrawイベントガントチャートコントロールを使用する方法について説明します。

カスタムドローイベント

DevExpress社のWinFormsガントカスタムドロー制御は、以下のイベントが含まれています。

  • CustomDrawTask - 手動で標準タスク、サマリータスクとマイルストーンを描くダイアグラム内の領域を制御することができます。
  • CustomDrawTaskDependency - (1点からタスクバータスクバー内の別の矢印)タスクの依存関係をカスタマイズするには、このイベントを使用します。
  • CustomTaskDisplayTextは - あなたはタスクのタイトルをカスタマイズすることができます。
  • CustomDrawTimescaleColumnは - あなたが作業領域の定義図のパネルをカスタマイズすることができます。

これらのイベントを組み合わせることで、あなたはまだ制御機能(など、タスクが期日を指定した分割、クリティカルパスを描く)に統合されて導入することができます。

クリティカルパス

クリティカルパスは、それらの間の遅延がゼロで、非常に重要なプロジェクトタスクのシリーズです。あなたはWinFormsのに準備ができている場合は、ガントは、手動タスクバーとそれらを組み合わせ結ぶ矢印に関連付けられているクリティカルパスを強調するために、あなたはCustomDrawTaskとCustomDrawDependencyイベントを使用することができ、ソフトウェアプロジェクトに統合し、次のメジャーアップデートを待つことはできません。

DevExpress社Winformsのヒントチュートリアル:カスタムでのガントチャートコントロールの描画

注:このサンプルコードと他のコード例の使用において、皮膚の色要素を強調し、これらの色は、わずかに皮膚の現在の用途に応じて色調を変化させます。

HashSetの<整数> criticalPathIds =新しいHashSetの<整数> {1、2、3、6、7、8、10、11、13}。
ganttControl.CustomDrawTask + =(送信者、E)=> {
int型のtaskId = Convert.ToInt32(e.Node.GetValue( "ID"))。
IF(criticalPathIds.Contains(のtaskId)){
e.Appearance.BackColor = DXSkinColors.FillColors.Danger。
e.Appearance.ProgressColor = DXSkinColors.FillColors.Danger。
}
}。
ganttControl.CustomDrawTaskDependency + =(送信者、E)=> {
INT predecessorId = Convert.ToInt32(e.PredecessorNode.GetValue( "ID"))。
int型successorId = Convert.ToInt32(e.SuccessorNode.GetValue( "ID"));
IF(criticalPathIds.Contains(predecessorId)&& criticalPathIds.Contains(successorId)){
e.Appearance.BackColor = DXSkinColors。FillColors.Danger;
}
}。

スプリットタスク

スプリットタスクは、タスクは後の時点で復元することである(与えられた時)割り込まれたタスクです。下の図では、「ソフトウェア開発」の2時間休止2、に、3時間の作業です。

DevExpress社Winformsのヒントチュートリアル:カスタムでのガントチャートコントロールの描画

カスタムドローイベントを使用するときは、タスクを分割し、遅れているかを知る必要があります。この情報を使用して、データソース内のタスクの完了日/時間を編集することができます。この例では、「ソフトウェア開発」タスク5時間でデータソースとして定義されています。

ganttControl.CustomDrawTask + =(送信者、E)=> {
SplitInfoとしてVAR splitInfo = e.Info.Node.GetValue( "SplitInfo")。
(!splitInfo = NULL){場合
e.Appearance.BackColor = DXSkinColors.FillColors.Danger。
e.Appearance.ProgressColor = DXSkinColors.FillColors.Danger。
e.DrawShape(splitInfo.Start、splitInfo.Start + splitInfo.Duration)。
e.DrawRightText();
e.Handled =はtrue。
}
}。

より効果的なアプローチは、時間をタスクとデータソースに格納された日/終了日を開始し、必要な場合に一時停止を挿入することです。このアプローチをサポートするために、ガントチャートは、すべての制御タスクを再計算し、それに応じて動的に更新し、ダイアグラムTreeListパネルことができなければなりません。

カスタムタスクのテキスト

下一个示例说明如何使用自定义文本字符串(“High Priority”或“Normal Priority”)替换任务的标题,这些自定义标题通过使用CustomTaskDisplayText事件绘制在任务的左侧或右侧。

DevExpress社Winformsのヒントチュートリアル:カスタムでのガントチャートコントロールの描画

HashSet<int> criticalPathIds = new HashSet<int> { 1, 2, 3, 6, 7, 8, 10, 11, 13 };
ganttControl.CustomTaskDisplayText += (sender, e) => {
int taskId = Convert.ToInt32(e.Node.GetValue("Id"));
if(criticalPathIds.Contains(taskId)) {
e.RightText = "High priority";
}
else {
e.RightText = string.Empty;
e.LeftText = "Normal priority";
}
};

Striplines

Stripline是彩色的时间刻度列,突出显示特定时间段(例如,周末)。 在下图中,Stripline突出显示了自定义的4小时间隔。

DevExpress社Winformsのヒントチュートリアル:カスタムでのガントチャートコントロールの描画

您可以通过CustomDrawTimescaleColumn事件重新绘制时标列来实现Striplines。

DateTime striplineStart = DateTime.Now.AddHours(5);
DateTime striplineEnd = striplineStart.AddHours(4);
Color striplineColor = Color.FromArgb(128, 255, 224, 166);
ganttControl.CustomDrawTimescaleColumn += (sender, e) => {
GanttTimescaleColumn column = e.Column;
float stripLineStartPoint = (float) Math.Max(e.GetPosition(striplineStart), column.Bounds.Left);
float stripLineEndPoint = (float) Math.Min(e.GetPosition(striplineEnd), column.Bounds.Right);
e.DrawBackground();
RectangleF boundsToDraw = new RectangleF(
stripLineStartPoint, column.Bounds.Y,
stripLineEndPoint - stripLineStartPoint, column.Bounds.Height);
if(boundsToDraw.Width > 0)
e.Cache.FillRectangle(striplineColor, boundsToDraw);
e.DrawHeader();
e.Handled = true;
};

截止期限

在下图中,“Deploy Beta”遵循固定的期限。

DevExpress社Winformsのヒントチュートリアル:カスタムでのガントチャートコントロールの描画

就像之前的代码片段一样,截止日期是通过CustomDrawTimescaleColumn事件绘制的,但是在这种情况下需要绘制一个细矩形,而不是用自定义颜色填充整个列。

DateTime deadLine = TaskStorage.GetFinishDateFromTask("Deploy Beta");
ganttControl.CustomDrawTimescaleColumn += (sender, e) => {
GanttTimescaleColumn column = e.Column;
if(column.StartDate <= deadLine && column.FinishDate >= deadLine) {
e.DrawBackground();
float x = (float) e.GetPosition(deadLine);
float width = 4;
RectangleF deadLineRect = new RectangleF(x, column.Bounds.Y, width, column.Bounds.Height);
e.Cache.FillRectangle(DXSkinColors.FillColors.Danger, deadLineRect);
e.DrawHeader();
e.Handled = true;
}
};


DevExpress社v19.2新しいリリースは、経験の最新バージョンをダウンロードしてくださいああ〜

DevExpress社の中国ネット公式サイトのQQグループ:540 330 292は、議論するために一緒にグループに歓迎

スキャン注意DevExpress社の中国のマイクロチャネルパブリックネットワーク番号、最新の動向と最新情報へのタイムリーなアクセス

DevExpress社の中国のマイクロチャネルネットワーク

おすすめ

転載: www.cnblogs.com/AABBbaby/p/11933977.html