Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

Windowsスケジュール管理機能を持った.NETアプリケーションの作成

ComponentOne Studioを活用したWindowsフォームアプリケーションの作成

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2013/09/13 14:00

 「ComponentOne Studio 2013J」の「Scheduler for WinForms」に含まれるC1ScheduleコントロールとC1Calendarコントロールを組み合わせて、Outlookスタイルのスケジューラアプリケーションを作成してみます。

はじめに

 「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」の「C1Schedule」「C1Calender」、「C1.Win.C1SplitContainer.4」の「C1SplitContainer」コントロールを選択する
アセンブリ名が「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コントロールアセンブリ
全部で4つのライブラリへの参照が必要
全部で4つのライブラリへの参照が必要

 また、プロジェクトに以下のランタイムライブラリが追加されます。

ファイル 内容
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コントロールは、カレンダーとスケジューラをペインに分けるのに使用します。

※1

 データベース関係のコンポーネントは、C1Scheduleコントロールにデータベース連結を行うと作成されるコンポーネントです。

フォームのレイアウト
フォームのレイアウト

データベースの準備

 入力したスケジュールを保存するために、データベースにデータ保存用のテーブルを作成します。また、併せて連絡先の内線電話番号をリストから選択できるように電話番号のテーブルも作成します(なお、このアプリケーションではMicrosoft Accessのデータベースを使用します)。

 予定データの保存には、以下の形式のテーブルを用意します。

フィールド名 データ型 フィールドサイズ インデックス プライマリキー
ID オートナンバー   はい あり
件名 テキスト デフォルト なし  
場所 テキスト デフォルト なし  
開始日時 日付時刻   なし  
終了日時 日付時刻   なし  
本文 メモ   なし  
プロパティ メモ   なし  
Ouner 数値   なし  

 連絡先データの保存には、以下の形式のテーブルを用意します。また、連絡先テーブルには、適当に電話番号を入力しておきます。

フィールド名 データ型 フィールドサイズ インデックス プライマリキー
ID オートナンバー   はい あり
内線番号 Text デフォルト はい  
作成したAccessのデータベース
作成したAccessのデータベース

コントロールの作成と配置

 フォームにC1Schedule、C1Calender、C1SplitContainerの3つのコントロールを配置していきます。

カレンダーの設定

 最初にカレンダーを設定します。ここでは、カレンダーを3か月表示にし、スケジューラと連動する設定を行います。

 ① まずは、以下の参照設定を忘れずに行ってください。

ファイル名 説明
C1.C1Report.4.dll C1Reportコントロールアセンブリ
C1.Win.C1Report.4.dll C1PrintPreviewコントロールアセンブリ

 ② フォームにC1SplitContainerコントロールを配置し、DockプロパティをFillにします。

 ③ タスクトレイから「パネルの追加」を選び、スプリッターの下部にパネルをもう1枚追加します。

パネルを1枚追加
パネルを1枚追加

 ④ 各パネルのTextプロパティの値を削除します。

 ⑤ 上のパネルにC1Calenderコントロールを配置し、DockプロパティをFillにします。

 ⑥ 下のパネルにC1Scheduleコントロールを配置し、DockプロパティをFillにします。

 ⑦ C1Calenderコントロールの左上にある[C1Calendarスマートデザイナ]の〈カレンダー数および親のC1Scheduleコントロールの設定〉ボタンをクリックします。

〈カレンダー数および親のC1Scheduleコントロールの設定〉ボタンをクリック
〈カレンダー数および親のC1Scheduleコントロールの設定〉ボタンをクリック

 ⑧ 「C1Calender1-設定」というダイアログボックスが表示されるので、「カレンダーの数」を「3」にし、「C1Scheduleコントロール」のリストから「C1Schedule1」を選びます。これで、カレンダーとスケジューラが連動し、カレンダーで日付を変更すると自動的にスケジューラの日付も変わります。

 ⑨[C1Calendarスマートデザイナ]の「外観オプションの設定」ボタンをクリックします。

 ⑩ 「表示スタイル」のリストから「Yahoo」を選びクリックします。

「表示スタイル」のリストから「Yahoo」を選びクリック
「表示スタイル」のリストから「Yahoo」を選びクリック

 カレンダーのデザインが、シルバー基調のカラーになります。

スケジューラの設定

 次に、C1Scheduleコントロールを設定します。ここでは、スケジューラを週表示にし、ワークタイムを9時から22時に変更します。

 ① C1Scheduleコントロールの左上にある[C1Scheduleスマートデザイナ]の〈カレンダーのパラメータの設定〉ボタンをクリックします。

〈カレンダーのパラメータの設定〉ボタンをクリック
〈カレンダーのパラメータの設定〉ボタンをクリック

 ② 「開始時刻」を「09:00」に、「終了時刻」を「22:00」に設定します。

「開始時刻」を「09:00」に、「終了時刻」を「22:00」に設定
「開始時刻」を「09:00」に、「終了時刻」を「22:00」に設定

 ③ [C1Scheduleスマートデザイナ]のViewリストから「WeekView」を選びクリックします。これで、スケジューラは週単位の表示に設定されます。

Viewリストから「WeekView」をクリック
Viewリストから「WeekView」をクリック

 ④ [C1Scheduleスマートデザイナ]の「外観オプションの設定」ボタンをクリックします。

「外観オプションの設定」ボタンをクリック
「外観オプションの設定」ボタンをクリック

 ⑤ 表示スタイルのリストから「Office2010Blue」を選びクリックします。

 スケジューラのデザインが変更されます。

「Office2010Blue」を選びクリック
「Office2010Blue」を選びクリック

データベースの連結

 今度は、作成したデータベースとスケジューラを連結します。予定のテーブルと連絡先のテーブルを、それぞれスケジューラの担当機能に連結していきます。

予定データの保存テーブルの連結

 最初は、予定を保存するテーブルをスケジューラに連結します。

 ① 「C1Scheduleコントロール」の[C1Scheduleタスク]メニューで、〈Appointmentデータソースの選択〉ドロップダウン矢印をクリックし、[プロジェクトのデータソースの追加]をクリックします。

[プロジェクトのデータソースの追加]をクリック
[プロジェクトのデータソースの追加]をクリック

[プロジェクトのデータソースの追加]をクリック

 ② 「データベース構成ウィザード」に従い、作成したAccessデータベースを選択していきます。接続文字列は「スケジュール保存ConnectionString」で、テーブル「予定」の全フィールドを選択します。

 ③ 同じく[C1Scheduleタスク]メニューで、〈Appointmentマッピングの設定〉をクリックします。

〈Appointmentマッピングの設定〉をクリック
〈Appointmentマッピングの設定〉をクリック

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

 これで、予定に入力した内容とデータベースのフィールドが連動するようになりました。

それぞれの項目にテーブルの各フィールドと一致する項目をリストから選び設定
それぞれの項目にテーブルの各フィールドと一致する項目をリストから選び設定

 ⑤ もう一度[C1Scheduleタスク]メニューを開き、〈Contactデータソースの選択〉ドロップダウン矢印をクリックし、[プロジェクトのデータソースの追加]をクリックします。

〈Contactデータソースの選択〉ドロップダウン矢印をクリックし、
[プロジェクトのデータソースの追加]をクリック
〈Contactデータソースの選択〉ドロップダウン矢印をクリックし、[プロジェクトのデータソースの追加]をクリック

 ⑥ 「データベース構成ウィザード」に従い、作成したAccessデータベースを選択し、接続文字列は「スケジュール保存ConnectionString」のままで、テーブル「内線番号一覧」の全フィールドを選択します。

 データセット名は「スケジュール保存DataSet1」のままにします。

テーブル「内線番号一覧」の全フィールドを選択
テーブル「内線番号一覧」の全フィールドを選択

 ⑦ もう一度[C1Scheduleタスク]メニューを開き、〈Contactマッピングの設定〉をクリックします。

〈Contactマッピングの設定〉をクリック
〈Contactマッピングの設定〉をクリック

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

「Contactストレージのプロパティ」を設定する
「Contactストレージのプロパティ」を設定する

 ⑨ 以上でGUIが完成です。作成したアプリケーションを実行し、予定を入力したいセルをダブルクリックすると、入力用ダイアログボックスが表示されます。「連絡先」にも電話番号が表示されます。

アプリケーション実行画面
アプリケーション実行画面

データの保存処理

 入力した予定データの保存処理コードを記述します。

 読み出しコードは、すでにVisual StudioによってフォームのLoadイベントハンドラに作成されていますので、保存オプション処理だけを作成します。これは、フォームのClosingイベントハンドラに作成します。

 なお、データ保存の際は、DataSetオブジェクトの制約チェックを一時的に無効するため、EnforceConstraintsプロパティをFalseにしてからUpdateメソッドを実行します。

Visual Basic
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
C#
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行書くだけで済みます。

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 瀬戸 遥(セト ハルカ)

    8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5