Studio」に含まれるC1GanttViewコントロールを使って、ガントチャートでプロジェクト管理を行うWindowsフォームアプリケーションを作成してみます。はじめに社内のプロジェクトは数が多くなると管理が大変なので、管理にパソコンを使うのが当たり前になっています。いえ専用のアプリケーションソフトは数が少なく、自社専用のプロジェクト管理アプリケーションを開発するとなると大変です。Project風のプロジェクト管理機能を持ち、ガントチャートを使ってプロジェクト管理を行えるコントロールです。アプリケーション実行時にプロジェクトのタスクとスケジュールの設定が行えるのはもちろん、工程の自動修正や、進捗状況やイナズマ線の表示、バーのカスタマイズなどの機能を持ち、スケジュール管理の行いやすさと見やすさを実現しています。そこで今回は、このC1GanttViewコントロールを使ってプロジェクトを管理するためのWindowsフォームアプリケーションを作成してみました。本稿は2013年7月に掲載された記事を加筆修正し、サンプルアプリケーションのコントロールおよびDLLファイルを現在のバージョンに更新したものです。2010/2012/2013を使ってプログラムを作ったことがある人。2010/2012/2013でプログラムが作れる環境。本プログラムは次の環境で開発・動作確認を行っています。本稿の実行ファイル(バイナリファイル)を動かすには、zipファイルに同梱してある以下のファイルが必要になります。4でのみご使用いただけます。本体アセンブリこのファイルを、実行プログラムと同じフォルダに格納します。このサンプルファイルには、サンプルのXMLデータファイル「gantt_data.xml」を同梱しています。サンプルデータを使う際は、バイナリ実行ファイルと同じフォルダにサンプルデータを入れてください。コンポーネントのインストールトライアル版は、グレープシティのWebページから申し込みできます。トライアル申込フォームが表示されますので、必要情報を入力して申し込むとトライアル版のダウンロード手順を記載したE-Mailが送られてきます。その手順にそってダウンロードを行ってください。ダウンロードファイルは圧縮ファイルになっていますので、解凍してインストーラを起動します。制限事項などの詳細については、インストーラに同梱されているリリースノートを参照ください。Studioをインストールしたら、プロジェクトにコントロールを追加します。ツールボックスに専用のタブを作成し、使用するコンポーネントを追加します。追加するコンポーネントは、アセンブリ名が「C1.Win.C1GanttView.4」の「C1GanttView」コントロールです。アセンブリ名が「C1.Win.C1GanttView.4」の「C1GanttView」コントロールを選択する@@このコントロールを追加すると、プロジェクトに以下のランタイムライブラリへの参照が追加されます。本体アセンブリまた、プロジェクトに以下のランタイムライブラリが追加されます。Project風の使用感でプロジェクト管理を行う機能を備えたコントロールです。コントロール内に必要なスケジュール管理機能を豊富に持っており、WindowsフォームにC1GanttViewコントロールを配置するだけで、ガントチャートを持ったプロジェクト管理アプリケーションを作成することができます。C1GanttViewコントロールは、デザイン時・実行時のどちらでもプロジェクトをタスクごとのスケジュールで計画し設定することができます。設定したスケジュールはガントチャートとしてグラフィック表示され、プロジェクトの計画が一目で分かるようになっています。プロジェクトのスケジュール設定にあたっては、一つ一つのタスクを主導で設定することはもちろん、タスクや期間、制約などのリストからスケジュールを自動的に生成することもできます。設定したスケジュールは、アプリケーション実行時にいつでも調整・変更することができます。ユーザーがテーブル形式のデータグリッドや入力ダイアログを使用したり、グラフペイン内のバーをクリック&ドラッグしたりすることで、タスク情報を手動で編集することもできます。C1GanttViewコントロールはC1FlexGridコントロールの拡張コントロールで、2つのグリッドから構成されます。左側は従来のデータ入力に、右側(グラフ)はクリック&ドラッグ入力に使用します。2つのグリッドはサイズ調整可能なスプリッタで分割されています。作成したプロジェクトはXMLファイルに読み出して保存でき、また読み込むことができます。C1GanttViewコントロールには、C1GanttViewコントロールを操作するためのコマンドを組み込んだ専用のツールバーが用意されています。C1GanttViewコントロールの主な特徴C1GanttViewコントロールは、以下の特徴を持っています。Projectと同様に自動と手動両方のスケジュール作成がサポートされています。自動スケジュール作成は、プロジェクトの開始日または終了日からスケジュールできます。開始日を入力すると、その日に開始する最初の自動スケジュールタスクがスケジューリングされ、以降の自動スケジュールタスクのシーケンスが計算されます。終了日を入力すると、その日に終了する最後のタスクがスケジューリングされ、次にその最終タスクの前のタスク、その前のタスクという風に最初のタスクがスケジューリングされるまで続き、最後にプロジェクトの開始日が計算されます。C1GanttViewコントロールは、最適なスケジュールを完了するためにタスクの最も早い日付または最も遅い日付を計算できます。手動スケジュール作成はデフォルトモードで、個々のタスクスケジュールの計画と管理を手動で設定します。手動スケジュールでは、C1GanttViewコントロールによってタスクの開始日と終了日が設定されることはありません。指定するカスタムカレンダー設定を作成して保存することができます。C1GanttViewコントロールでは、手動および自動スケジュールタスク用にデフォルトの稼働日と非稼働日が定義されています。非常に柔軟なタイムスケジュールがサポートされており、強力な繰り返しパターンを使用して、稼働日やカレンダーの例外をカスタマイズすることができます。実行時ダイアログを使用して、3階層の日付/時刻形式を指定することができます。制約とは、タスクの開始日または終了日に設定される制限のことです。各タスクには自動モードでスケジュールを作成する際に、守る必要がある制約タイプと制約日を割り当てることができます先行タスク各タスクには、1つまたは多数の先行タスクを割り当て、その開始または終了に依存させることができます。先行タスク(依存関係)は、タスクバー間の矢印で視覚化されます。タスクバーを先行タスクにドラッグすることで先行タスクを指定することもできます。期限タスクを完了させる必要のある期限を設定します。期限が設定されたタスクは視覚的に判別できます。特定のタスクに期限を設定すると、グラフに下向きの緑の矢印が表示されます。期限の表示(ヘルプより抜粋)競合の検証スケジュールの競合が発生したときにユーザーにそれを通知します。制約とリンクされたタスクの間に競合が発生したり、タスク間の参照が循環参照になったり、タスクの終了日前に期限がスケジューリングされたりしたときに、ガントチャートのバーに競合を通知する赤いインジケーターが表示されます。競合の表示(ヘルプより抜粋)リソース人員、資材、コストなど、プロジェクトのリソースのリストを管理します。任意の数のリソースをタスクに割り当て、それぞれに原価率を指定できます。達成率ガントチャートのタスクバーでは、タスクの達成率を視覚化するプログレスバー風の表示をできます。達成率の表示(ヘルプより抜粋)マイルストーンマイルストーンは、プロジェクトの重要な時点または目印です。マイルストーンは、期間がゼロのタスクとして作成され、ひし形で視覚化されます。作成したプロジェクトをXML形式のファイルとして保存することができます。保存したXMLファイルはいつでも読み込んでC1GanttViewコントロールに表示させることができます。LoadXMLメソッドを使って操作することもできます。カスタム列グリッドでは、独自のデータ型、データ形式、およびテキスト配置カスタム列を作成することができます。作成したカスタム列はXMLファイルに保存したり、XMLファイルからデータをロードしたりできます。バースタイルのカスタマイズガントチャートのタスクバーは、スタイルの形状と色を変更したり、単純に特定の1タスクのスタイルをカスタマイズしたりすることができます。ユーザーは、リソース名など、バーの両側に表示するテキストフィールドを指定することもできます。バーの設定ダイアログボックス(ヘルプより抜粋)組み込みツールバーC1GanttViewコントロールには、コントロールの機能をすぐに呼び出せる組み込みツールバーが付属しています。ユーザーは、1クリックでプロジェクト情報の管理、タスクの移動、挿入、削除を行えます。ユーザーは、表示されているグリッド列、リソース、タイムスケール、およびバースタイルを管理することもできます。使用することもできます。組み込みツールバー(ヘルプより抜粋)C1GanttViewコントロールの概要(2)C1GanttViewコントロールの構成要素C1GanttViewコントロールは、次のような要素から構成されています。C1GanttViewコントロールの構成要素グリッドビュータスクを設定するグリッドが配置されています。タスクの設定は、このビューの上でコンテキストメニューを表示し、「タスク情報」をクリックすると表示されるダイアログボックスで行います。スケジュールモードを「自動スケジュール」にすると、「期間」を設定するだけでバーが自動的に作成されます。この時の「開始日」は、C1GanttViewコントロールの「StartDate」に設定した日付です。入力すればバーが作成されます。作成したタスクスケジュールをビジュアルで表示するエリアで、設定した期間をバーで表示します。このバーはカスタマイズ可能で、コンテキストメニューの「バーの情報」をクリックすると、すべてのバーを一括でカスタマイズできます。個々のタスクのバーをカスタマイズしたい場合は、「タスク情報」ダイアログボックスにある「バーの設定」ボタンをクリックします。いずれも、「バーの設定」ダイアログボックスが表示され、バーの形状や色、テキストの表示などをカスタマイズできます。作成したタスクはバーで表示されますが、設定後もマウスでドラッグして移動や伸縮をさせることができます。このバーは次の操作が行えます。(1)バーの終端をドラッグするとバーが伸び縮みし、バーそのものをドラッグするとスケジュールを移動できます。バーの終端をドラッグするとバーが伸び縮みするバーそのものをドラッグするとスケジュールを移動できる(2)バーをダブルクリックすると「タスク情報」ダイアログボックスが表示され、タスクの修正を行うことができます。(3)バーから次のタスクのバーにマウスポインタをドラッグすると、イナズマ線を設定できます。(4)バーの開始日からマウスポインタをドラッグすると、達成率を入力できます。達成率を入力できるツールバータスクやバーの設定・編集を行うコマンドを持った組み込みのツールバーです。コンテキストメニューもこのツールバーのコマンドに組み込まれています。XMLファイルの読み書き操作もこのツールバーのコマンドに組み込まれています。ビューの境界線2つのビューを仕切る境界線です。マウスでドラッグすることで境界線を移動でき、お互いのビューのサイズを変更できます。C1GanttViewコントロールの外観デザインC1GanttViewコントロールの「VisualStyle」プロパティを「Custom」に設定すると、以下のプロパティを使用して、C1GanttViewコントロールの各部位のスタイルを変更できます。グリッドビューとグラフビューのセルの枠線のカスタム色を指定します。タスクの下の空の領域の背景色を指定します。固定列/タイムスケール領域のカスタム背景色を指定します。固定領域のセルの枠線のカスタム色を指定します。固定列/タイムスケール領域のカスタム前景色を指定します。グリッドビューのハイライト行のカスタム背景色を指定します。グリッドビューのハイライト行のカスタム前景色を指定します。非稼働時間の描画に使用するブラシの色を指定します。グリッドビューとグラフビューの間のスプリッタのカスタム色を指定します。プロジェクトの開始日/終了日の線の色を指定します。「今日」の線の色を指定します。ツールバーのカスタム背景色を指定します。各プロパティの設定例(ヘルプより抜粋)C1GanttViewコントロールのツールチップをカスタマイズするツールバーのツールチップやソートのプルダウンメニューなどが文字化けし、中国語のようなテキストが表示されてしまう場合があります。ツールチップカスタマイズしたい場合もあると思います。その場合は、これらのツールチップテキストに日本語の表示を設定するコードを作成すれば、文字化けを回避できます。ツールチップテキストを設定するには、C1GanttViewコントロールの下層にあるToolStripクラスのToolTipTextプロパティを設定します。設定したいツールバーの位置をItemsプロパティに番号で指定し、ToolTipTextプロパティに表示したい文字列を設定します。次のコードは、ツールバーの保存ボタンのツールチップを、デフォルトの「XMLファイルに保存」から「上書き保存」に変更します。"上書き保存";ツールチップを「XMLファイルに保存」から「上書き保存」に変更GUIの作成では、早速アプリケーションを作成していきましょう。いっても、プロジェクトの設定機能はすべてC1GanttViewコントロールに組み込まれていますから、このアプリケーションでは「終了」ボタンを設けて、アプリケーション終了時に作成したプロジェクトデータをXMLファイルに保存する処理と、アプリケーション起動時にXMLファイルを読み込む処理を作成するだけです。XMLファイルは、アプリケーションと同じフォルダに「gantt_data.xml」というファイル名で保存します。フォームのレイアウトフォームには、C1GanttViewコントロールを配置し、Dockプロパティを「Top」に設定します。「StartDate」プロパティを「2015/07/20」に設定します。これで、行列のヘッダーセルがオレンジ色に変わります。続いて、Buttonコントロールを1つ配置し、Clickイベントハンドラを作成します。フォームは、LoadとFormClosedイベントハンドラを作成します。フォームのレイアウトイベントハンドラの処理XMLファイルを読み出してC1GanttViewコントロールに組み込むには、C1GanttViewコントロールのLoadXmlメソッドを、XMLファイルに書き出すにはSaveXmlメソッドを使用します。いずれも、引数はファイル名です。ここでは、XMLファイルはアプリケーションと同じフォルダに「gantt_data.xml」というファイル名で保存します。アプリケーションを初めて起動したときは、XMLファイルは存在しないので、FileクラスのExistsメソッドでファイルの有無を確認し、ファイルがある場合のみ読み込むようにします。XMLファイルに書き出す場合は、フォームクローズ時に無条件に保存するようにしています。}}タスクの作成では、アプリケーションを起動して実際にプロジェクトのタスクを設定してみましょう。ここでは、基本的なタスク設定の操作を行ってみます。(1)アプリケーションを起動します。(2)ツールバーにある「タスク情報」ボタンをクリックするか、コンテキストメニューの「タスク情報」をクリックします。ツールバーにある「タスク情報」ボタンをクリック(3)「タスク情報」ダイアログボックスで次の項目を入力します。2015/07/20「タスク情報」ダイアログボックスでタスクを設定(4)ツールバーの「バーの設定」ボタンをクリックし、「バーの設定」ダイアログボックスで「色」を明るいピンクにします。「バーの文字列」タブをクリックし、次の項目を設定します。終了日これで、1つ目のタスクができました。設定したバー(5)次に、その下のタスクをクリックし、ツールバーの「タスク情報」ボタンをクリックします。空欄タスク用にダイアログボックスが表示されるので、次の新しいタスクを入力します。自動スケジュール次の新しいタスクを入力(6)続けて「バーの設定」ボタンをクリックし、バーの設定を行います。色はデフォルトのまま、「バーの文字列」タブをクリックし、次の項目を設定します。終了日このように、タスクとバーの設定を一度に行うこともできます。バーの文字列を設定でき上がったタスク(7)続いて3つ目のタスクを作成します。同じようにタスクグリッドの次の行をクリックして、ツールバーの「タスク情報」ボタンをクリックします。今度は、「仕様・設計」タスクに続くタスクを作成しますので、スケジュールモードを「手動スケジュール」で作成します。「手動スケジュール」の場合は、「期間」と「開始日」を入力します。「開始日」は、カレンダーボタンをクリックするとカレンダーが表示されますので、ここから選びます。「終了日」は「期間」を入力していれば自動で計算してくれます(※「期間」は、土日を除いた実労働日になります)。2015/07/27また、「バーの設定」ボタンをクリックし、「バーの文字列」を設定します。終了日3つ目のタスクを作成でき上がったタスクバー(8)これまでの操作を繰り返し、最後のタスクを作成します。今度は、「期間」は入力せずに「開始日」と「終了日」を設定します。2015/08/15また、「バーの設定」ボタンをクリックし、「バーの文字列」を設定します。ライムグリーンこれで、3番目のタスクとプロジェクト全体のタスクスケジュールができ上がりました。でき上がったプロジェクト全体のタスクスケジュール一度作成したタスクを修正したい場合は、タスクバーをダブルクリックすれば「タスク情報」ダイアログボックスが表示され、編集できるようになります。「C1GanttViewコントロールの構成要素」で説明したように、イナズマ線を設定したり、バーをドラッグしてスケジュールを変更したりすることもできます。ツールバーへのボタンの追加ツールバーに独自のボタンを追加したり、不要なボタンを削除したりするには、C1GanttViewのToolStripを使用します。このオブジェクトのItems.Addメソッド、Items.Insertメソッド、およびItems.RemoveAtメソッドを用いて、ボタンの追加、挿入、削除を行うことができます。ここでは、ツールバーにアプリケーションのバージョン情報を表示するコマンドボタンを追加します。ToolStripButtonクラスのコンストラクタでボタンを作成します。引数はボタンの文字列です。次に、このボタンのイベントハンドラを作成し、C1GanttViewコントロールのToolStripコレクションオブジェクトに作成したボタンを追加します。Basic'ツールバーにボタンを追加。続いて、このボタン用のClickイベントハンドラを作成し、メッセージボックスを表示する処理を作成します。Ver1.0.0");}ツールバーにボタンが追加されるボタンをクリックするとメッセージボックスが表示されるツールバーからボタンを削除する場合はItems.RemoveAtメソッドを、挿入する場合はItems.Insertメソッドを使用します。それぞれ、Itemsプロパティに操作対象のボタンの位置を番号で指定します。3番目のボタンを削除コンテキストメニューのカスタマイズコンテキストメニューもカスタマイズすることができます。コンテキストメニューは、グリッドビューとチャートビューにそれぞれあり、どちらもコンテキストメニューの項目を追加または削除できます。グリッドビューの場合はGridContextMenuオブジェクトを、チャートビューの場合はChartContextMenuオブジェクトにAddメソッドでコンテキストメニュー項目を追加します。メソッドの引数にはイベントハンドラの名前を指定します。ここでは、グリッドビューではツールバーのツールチップの表示・非表示を、チャートビューではアプリケーションの上書き保存を行うコンテキストメニューを追加します。EventHandler(ChartMenuItem1_click));そして、イベントハンドラを作成しその中にコンテキストメニュー項目が選択された時の処理を作成します。MessageBox.Show("上書き保存しました");}印刷機能の有効化C1GanttViewコントロールは、あらかじめ印刷する機能を実装しています。この機能は、C1Reportコントロールの機能を利用し、印刷プレビューからプリンタの設定,印刷まで印刷にかかわる機能を提供します。使い方は簡単で、まず、C1GanttViewコントロールの「EnabledPrinting」プロパティをTrueに設定します。参照設定に以下のアセンブリを追加します。C1.C1Report.4.dllC1.Win.C1Report.4.dllこれだけで、ツールバーの印刷ボタンが有効になり、印刷処理が可能になります。参照設定に2つのアセンブリを追加する印刷ボタンが有効になり印刷ダイアログが表示されるまとめ今回は、C1GanttViewコントロールの最も基本的な機能を紹介しましたが、C1GanttViewコントロールはとても豊富な機能を持っており、また多くの要素をカスタマイズできるので、コントロールそのものがアプリケーションになっているといっても過言ではありません。独自のプロジェクト管理アプリケーションを作成するのに新たな機能を追加する必要はなく、仕様に合わせてC1GanttViewコントロールをカスタマイズするだけで済みます。3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。圧縮・解凍UNIX基本講座@CodeZine『CodeZine(コードジン)』の公式アカウントです。【NEW】デブスト2019デブサミ2019福岡・関西デブサミ2019夏デブスト関西デブサミ2019×ログインEメールパスワード※旧SEメンバーシップ会員の方は、同じ登録情報(Eメール&パスワード)でログインいただけます。イラストの無断転載を禁じます。記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。