はじめに
「ComponentOne Studio 2013J」に含まれる「Scheduler for WinForms」のC1Scheduleコントロールは、ユーザーによる予定の追加/編集/管理が容易な、Outlookスタイルのスケジュール機能をアプリケーションに実装できるコントロールです。ComponentOne Studioの他のコントロールと同様、ほとんどコードを書くことなくアプリケーションにスケジュール機能を組み込むことができます。
今回は、このC1Scheduleコントロールに、日付のナビゲーション機能を提供するC1Calendarコントロール(同じく「Scheduler for WinForms」に収録)を組み合わせ、スケジューラアプリケーションを作成してみました。
対象読者
Visual Basic 2010/2012、またはVisual C# 2010/2012を使ってプログラムを作ったことがある人。
必要な環境
Visual Basic 2010/2012、Visual C# 2010/2012、Visual Studio 2010/2012でプログラムが作れる環境。
なお、本プログラムは次の環境で開発・動作確認を行っています。
- OS:Windows 7
- 開発Tool:Visual studio 2010、.NET Framework 4
プログラム実行時の注意事項
本稿の実行ファイル(バイナリファイル)を動かすには、zipファイルに同梱してある以下のファイルが必要になります(.NET Framework 4でのみご使用いただけます)。
ファイル名 | 説明 |
---|---|
C1.C1Report.4.dll | C1Reportコントロールアセンブリ |
C1.Win.C1Report.4.dll | C1PrintPreviewコントロールアセンブリ |
C1.Win.C1Schedule.4.dll | C1Scheduleコントロールアセンブリ |
C1.Win.C1SplitContainer.4.dll | C1SplitContainerコントロールアセンブリ |
このファイルを、実行プログラムと同じフォルダに格納します。
コンポーネントのインストール
トライアル版は、グレープシティのWebページから申し込みできます。
トライアル申込フォームが表示されますので、必要情報を入力して申し込むとトライアル版のダウンロード手順を記載したE-Mailが送られてきます。その手順にそってダウンロードを行ってください。また、ダウンロードファイルは圧縮ファイルになっていますので、解凍してインストーラを起動します。
制限事項などの詳細については、インストーラに同梱されているリリースノートを参照ください。
コントロールと参照の追加
ComponentOne Studio 2013Jをインストールしたら、プロジェクトにコントロールを追加します。
ツールボックスに専用のタブを作成し、使用するコンポーネントを追加します。追加するコンポーネントは、アセンブリ名が「C1.Win.C1Schedule.4」の「C1Schedule」「C1Calender」、「C1.Win.C1SplitContainer.4」の「C1SplitContainer」コントロールです。
これらのコントロールを追加すると、プロジェクトに以下のランタイムライブラリへの参照が追加されます。
ファイル | 内容 |
---|---|
C1.Win.C1Schedule.4.dll | C1Scheduleコントロールアセンブリ |
C1.Win.C1SplitContainer.4.dll | C1SplitContainerコントロールアセンブリ |
併せて以下のライブラリへの参照を追加してください。
ファイル名 | 内容 |
---|---|
C1.C1Report.4.dll | C1Reportコントロールアセンブリ |
C1.Win.C1Report.4.dll | C1PrintPreviewコントロールアセンブリ |

また、プロジェクトに以下のランタイムライブラリが追加されます。
ファイル | 内容 |
---|---|
C1.Win.C1Schedule.4.dll | C1Scheduleコントロールアセンブリ |
C1.Win.C1SplitContainer.4.dll | C1SplitContainerコントロールアセンブリ |
C1.C1Report.4.dll | C1Reportコントロールアセンブリ |
C1.Win.C1Report.4.dll | C1PrintPreviewコントロールアセンブリ |
なお、.NET Framework 4が必要です。
C1Scheduleコントロールの概要
C1Scheduleコントロールは、アプリケーションにスケジュール機能を組み込むためのコンポーネントスイートです。予定の詳細入力・提示にかかわる数多くの機能が搭載されており、直観的で洗練された外観のアプリケーションを構築できます。
データ連結
C1Scheduleコントロールでは、標準的なADO.NETデータ連結、組み込みのDataSourceのいずれかを使用する機能を持っているため、入力した予定の情報(件名、場所、分類項目、連絡先、ラベル、リソース、ステータス等)をAccessやSQL Serverのデータベースに保存/読み出しできます。
組み込みDataSourceを使用する場合は、アプリケーション側で必要なときに、サポートされている形式(バイナリ、XML、またはiCal)でデータの保存/ロードが可能です。これを行うには、C1ScheduleStorage ExportメソッドとImportメソッドを使用します。エンドユーザーは、いつでもC1Scheduleコントロールのコンテキストメニューから[インポート/エクスポート]項目を使用して、データのインポート/エクスポートを行うことが可能です。
予定の作成
スケジュールは、新しい予定を作成したり、既存の予定を編集したりできます。予定は、1回限りの発生または設定した回数の定期的な発生を設定できます。
アラームを設定して予定が見過ごされないようにできます。
さらに、C1Scheduleは、12種類の組み込みのラベルと、4種類の空き時間オプションを提供し、ユーザーによる各予定の管理を支援します。
また、カスタムラベルを作成する機能も提供します。予定を分類項目別に編成し、各予定のリソース、連絡先を指定できます。
データビュー
C1Scheduleコントロールには、4種類の組み込みのデータビューが含まれており、さまざまな方法でスケジュールを表示できます。これらのデータビューは、単一のViewTypeプロパティを使用して設定できるため、複数のコントロールを使用してそれぞれのビューを表示する必要がなく、開発時間が短縮されます。
ビュー | 説明 |
---|---|
DayView | 特定の1日の予定を表示する詳細ビューです。 |
MonthView | 1か月または複数の月の予定を表示します。 |
TimeLineView | 水平タイムラインに予定を表示します。 |
WeekView | 指定した平日の予定を表示します。 |
WorkWeekView | 指定した期間の予定を表示します。デフォルトは月曜日~金曜日です。 |
表示スタイル
C1Scheduleには、10種類の組み込みの表示スタイルが含まれています。また、設計時にカスタマイズした表示スタイルを作成し、それらをXMLファイルに保存することも可能です。
表示スタイル | 説明 |
---|---|
Aero | ライトイエローパレットを使用します。 |
Office 2007 Black | Microsoft Office 2007(黒)スタイルのテーマを使用します。 |
Office 2007 Blue | Microsoft Office 2007(青)スタイルのテーマを使用します。 |
Office 2007 Silver | Microsoft Office 2007(シルバー)スタイルのテーマを使用します。 |
Royale | Microsoft Windows Media Center(ロイヤル)スタイルのテーマを使用します。 |
System | 現在のデスクトップ設定を使用します。 |
Windows XP Blue | Microsoft Windows XP(青)スタイルのテーマを使用します。 |
Windows XP Olive | Microsoft Windows XP(オリーブグリーン)スタイルのテーマを使用します。 |
Windows XP Silver | Microsoft Windows XP(シルバー)スタイルのテーマを使用します。 |
Yahoo | グレーパレットを使用します。 |
Office 2010 Black | Microsoft Office 2010 Black テーマを模倣します。 |
Office 2010 Blue | Microsoft Office 2010 Blue テーマを模倣します |
Office 2010 Silver | Microsoft Office 2010 Silver テーマを模倣します。 |
GUIの作成
では、さっそくアプリケーションを作成していきましょう。
今回作成するアプリケーションでは、C1Schedule、C1Calender、C1SplitContainerの3つのコントロールを以下のようにレイアウトしています。
C1Calenderコントロールは、カレンダーとスケジューラを連動させて使用します。C1SplitContainerコントロールは、カレンダーとスケジューラをペインに分けるのに使用します。
データベース関係のコンポーネントは、C1Scheduleコントロールにデータベース連結を行うと作成されるコンポーネントです。
データベースの準備
入力したスケジュールを保存するために、データベースにデータ保存用のテーブルを作成します。また、併せて連絡先の内線電話番号をリストから選択できるように電話番号のテーブルも作成します(なお、このアプリケーションではMicrosoft Accessのデータベースを使用します)。
予定データの保存には、以下の形式のテーブルを用意します。
フィールド名 | データ型 | フィールドサイズ | インデックス | プライマリキー |
---|---|---|---|---|
ID | オートナンバー | はい | あり | |
件名 | テキスト | デフォルト | なし | |
場所 | テキスト | デフォルト | なし | |
開始日時 | 日付時刻 | なし | ||
終了日時 | 日付時刻 | なし | ||
本文 | メモ | なし | ||
プロパティ | メモ | なし | ||
Ouner | 数値 | なし |
連絡先データの保存には、以下の形式のテーブルを用意します。また、連絡先テーブルには、適当に電話番号を入力しておきます。
フィールド名 | データ型 | フィールドサイズ | インデックス | プライマリキー |
---|---|---|---|---|
ID | オートナンバー | はい | あり | |
内線番号 | Text | デフォルト | はい |
コントロールの作成と配置
フォームにC1Schedule、C1Calender、C1SplitContainerの3つのコントロールを配置していきます。
カレンダーの設定
最初にカレンダーを設定します。ここでは、カレンダーを3か月表示にし、スケジューラと連動する設定を行います。
① まずは、以下の参照設定を忘れずに行ってください。
ファイル名 | 説明 |
---|---|
C1.C1Report.4.dll | C1Reportコントロールアセンブリ |
C1.Win.C1Report.4.dll | C1PrintPreviewコントロールアセンブリ |
② フォームにC1SplitContainerコントロールを配置し、DockプロパティをFillにします。
③ タスクトレイから「パネルの追加」を選び、スプリッターの下部にパネルをもう1枚追加します。
④ 各パネルのTextプロパティの値を削除します。
⑤ 上のパネルにC1Calenderコントロールを配置し、DockプロパティをFillにします。
⑥ 下のパネルにC1Scheduleコントロールを配置し、DockプロパティをFillにします。
⑦ C1Calenderコントロールの左上にある[C1Calendarスマートデザイナ]の〈カレンダー数および親のC1Scheduleコントロールの設定〉ボタンをクリックします。
⑧ 「C1Calender1-設定」というダイアログボックスが表示されるので、「カレンダーの数」を「3」にし、「C1Scheduleコントロール」のリストから「C1Schedule1」を選びます。これで、カレンダーとスケジューラが連動し、カレンダーで日付を変更すると自動的にスケジューラの日付も変わります。
⑨[C1Calendarスマートデザイナ]の「外観オプションの設定」ボタンをクリックします。

⑩ 「表示スタイル」のリストから「Yahoo」を選びクリックします。
カレンダーのデザインが、シルバー基調のカラーになります。
スケジューラの設定
次に、C1Scheduleコントロールを設定します。ここでは、スケジューラを週表示にし、ワークタイムを9時から22時に変更します。
① C1Scheduleコントロールの左上にある[C1Scheduleスマートデザイナ]の〈カレンダーのパラメータの設定〉ボタンをクリックします。
② 「開始時刻」を「09:00」に、「終了時刻」を「22:00」に設定します。
③ [C1Scheduleスマートデザイナ]のViewリストから「WeekView」を選びクリックします。これで、スケジューラは週単位の表示に設定されます。
④ [C1Scheduleスマートデザイナ]の「外観オプションの設定」ボタンをクリックします。

⑤ 表示スタイルのリストから「Office2010Blue」を選びクリックします。
スケジューラのデザインが変更されます。
データベースの連結
今度は、作成したデータベースとスケジューラを連結します。予定のテーブルと連絡先のテーブルを、それぞれスケジューラの担当機能に連結していきます。
予定データの保存テーブルの連結
最初は、予定を保存するテーブルをスケジューラに連結します。
① 「C1Scheduleコントロール」の[C1Scheduleタスク]メニューで、〈Appointmentデータソースの選択〉ドロップダウン矢印をクリックし、[プロジェクトのデータソースの追加]をクリックします。
[プロジェクトのデータソースの追加]をクリック
② 「データベース構成ウィザード」に従い、作成したAccessデータベースを選択していきます。接続文字列は「スケジュール保存ConnectionString」で、テーブル「予定」の全フィールドを選択します。
③ 同じく[C1Scheduleタスク]メニューで、〈Appointmentマッピングの設定〉をクリックします。

④ 「Appointmentストレージのプロパティ」というダイアログボックスが表示されますので、それぞれの項目にテーブルの各フィールドと一致する項目をリストから選び設定します。
これで、予定に入力した内容とデータベースのフィールドが連動するようになりました。

⑤ もう一度[C1Scheduleタスク]メニューを開き、〈Contactデータソースの選択〉ドロップダウン矢印をクリックし、[プロジェクトのデータソースの追加]をクリックします。
[プロジェクトのデータソースの追加]をクリック
![〈Contactデータソースの選択〉ドロップダウン矢印をクリックし、[プロジェクトのデータソースの追加]をクリック](http://cz-cdn.shoeisha.jp/static/images/article/7372/7372_22.gif)
⑥ 「データベース構成ウィザード」に従い、作成したAccessデータベースを選択し、接続文字列は「スケジュール保存ConnectionString」のままで、テーブル「内線番号一覧」の全フィールドを選択します。
データセット名は「スケジュール保存DataSet1」のままにします。
⑦ もう一度[C1Scheduleタスク]メニューを開き、〈Contactマッピングの設定〉をクリックします。

⑧ 「Contactストレージのプロパティ」というダイアログボックスが表示されますので、それぞれの項目にテーブルの各フィールドと一致する項目をリストから選び設定します。

⑨ 以上でGUIが完成です。作成したアプリケーションを実行し、予定を入力したいセルをダブルクリックすると、入力用ダイアログボックスが表示されます。「連絡先」にも電話番号が表示されます。
データの保存処理
入力した予定データの保存処理コードを記述します。
読み出しコードは、すでにVisual StudioによってフォームのLoadイベントハンドラに作成されていますので、保存オプション処理だけを作成します。これは、フォームのClosingイベントハンドラに作成します。
なお、データ保存の際は、DataSetオブジェクトの制約チェックを一時的に無効するため、EnforceConstraintsプロパティをFalseにしてからUpdateメソッドを実行します。
Public Class Form1 Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 'TODO: このコード行はデータを 'スケジュール保存DataSet1.内線番号一覧' テーブルに読み込みます。必要に応じて移動、または削除をしてください。 Me.内線番号一覧TableAdapter.Fill(Me.スケジュール保存DataSet1.内線番号一覧) 'TODO: このコード行はデータを 'スケジュール保存DataSet.予定' テーブルに読み込みます。必要に応じて移動、または削除をしてください。 Me.予定TableAdapter.Fill(Me.スケジュール保存DataSet.予定) End Sub Private Sub Form1_FormClosing(sender As System.Object, e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing Me.スケジュール保存DataSet.EnforceConstraints = False Me.予定TableAdapter.Update(Me.スケジュール保存DataSet.予定) Me.スケジュール保存DataSet.EnforceConstraints = True End Sub End Class
namespace C1Schedule_cs { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { // TODO: このコード行はデータを 'スケジュール保存DataSet1.内線番号一覧' テーブルに読み込みます。必要に応じて移動、または削除をしてください。 this.内線番号一覧TableAdapter.Fill(this.スケジュール保存DataSet1.内線番号一覧); // TODO: このコード行はデータを 'スケジュール保存DataSet.予定' テーブルに読み込みます。必要に応じて移動、または削除をしてください。 this.予定TableAdapter.Fill(this.スケジュール保存DataSet.予定); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { this.スケジュール保存DataSet.EnforceConstraints = false; this.予定TableAdapter.Update(this.スケジュール保存DataSet.予定); this.スケジュール保存DataSet.EnforceConstraints = true; } } }
まとめ
このように、C1Scheduleコントロールを使用することで、高度なスケジュール管理機能を簡単にアプリケーションに実装することができます。データベースとの連結も、設定方法が分かれば簡単ですし、面倒なコードはデータベースのアップデート処理を3行書くだけで済みます。