本格的なスケジューリングアプリ作成を支援「Schedule for Windows Forms」
スケジューラを作ろうと思った時、まず思い浮かぶのは、グリッドコントロールとカレンダコントロールを連携して作成するようなGUIです。しかし、グリッドコントロールを使ってOutlookの予定表やGoogleカレンダーのような、かっこいいGUIを作るのは意外と大変です。
Schedule for Windows Formsならば、Windowsフォームにコントロールを貼るだけで図2のようなスケジュール画面が完成します。
![図2 Schedule for Windows Formsを配置](http://cz-cdn.shoeisha.jp/static/images/article/5141/02.gif)
また、スケジュール画面をダブルクリックすれば、図3のダイアログが表示されて予定の記入ができます。
![図3 予定記入ダイアログ](http://cz-cdn.shoeisha.jp/static/images/article/5141/03.gif)
注意点としては、図3のダイアログをカスタマイズできないということです。
Schedule for Windows Formsは、業務用コンポーネントのようなものに相当するので、例えば、一般的なコントロールのように[名前を付けて保存]ボタンを非表示にしたり、連絡先・分類項目・リソースなどの不要な項目を非表示にしたりといったプロパティはありません。好みや案件の特性などにもよるとは思いますが、図3にある項目は予定表には必要な機能だとして業務画面の仕様に採用するという考え方もあるでしょう。
別の方法としては、Schedule for Windows FormsのBeforeAppointmentCreateイベントの中でe.Cancel = Trueを実行して図3のダイアログの表示を抑止し、自分で作成したWindwosフォームを代わりに呼び出すようにプログラミングする方法です(詳しくはComponentOne Studioに添付されている「C1Schedule_Samples_VB\CustomData」サンプルを参考にしてください)。
Schedule for Windows Formsのプログラミング例
Schedule for Windows FormsでDataSetの内容を予定表に表示するには、AppointmentStorageのDataSourceにDataSetを設定します。今回は、画面で変更した内容が自動的にDataSetに反映されるように、DataSetをDataSourceに指定したBindingSourceコントロールをAppointmentStorageのDataSourceに指定します。
![図4 サンプル(CZ1004Sche)実行例](http://cz-cdn.shoeisha.jp/static/images/article/5141/04.gif)
Private ds As DataSet Private Sub Me_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown Using _proc As New CZ1004DataAccess ds = _proc.GetRecord("", "") If ds.Tables("予定") IsNot Nothing Then Me.BindingSource1.DataSource = ds With Me.C1Schedule1.DataStorage.AppointmentStorage .Mappings.Start.MappingName = "開始日時" .Mappings.End.MappingName = "終了日時" .Mappings.Location.MappingName = "場所" .Mappings.Subject.MappingName = "件名" .Mappings.Body.MappingName = "本文" .DataMember = "予定" .DataSource = Me.BindingSource1 End With End If End Using End Sub Private Sub C1Schedule1_AppointmentAdded(ByVal sender As Object, _ ByVal e As C1.C1Schedule.AppointmentEventArgs) _ Handles C1Schedule1.AppointmentAdded Using _proc As New CZ1004DataAccess _proc.SetRecord("", "", ds) End Using End Sub Private Sub C1Schedule1_AppointmentChanged(ByVal sender As Object, _ ByVal e As C1.C1Schedule.AppointmentEventArgs) _ Handles C1Schedule1.AppointmentChanged Using _proc As New CZ1004DataAccess _proc.SetRecord("", "", ds) End Using End Sub Private Sub C1Schedule1_AppointmentDeleted(ByVal sender As Object, _ ByVal e As C1.C1Schedule.AppointmentEventArgs) _ Handles C1Schedule1.AppointmentDeleted Using _proc As New CZ1004DataAccess _proc.SetRecord("", "", ds) End Using End Sub
- フォームが表示されたときに発生するShownイベントでCZ1004DataAccessクラスのGetRecordメソッドを実行して、取得したデータを予定表に表示
- 予定表の内容を変更するとAppointmentAddedイベント、AppointmentChangedイベント、AppointmentDeletedイベントが発生するので、それぞれのイベントの中でデータを格納するためにCZ1004DataAccessクラスのSetRecordメソッドを実行
リスト1では実際のデータ入出力をCZ1004DataAccessクラスに分離していますが、業務システム構築時であれば、CZ1004DataAccessクラスの中からSQL ServerやOracle DatabaseなどのRDBMSと接続したり、XML Webサービスなどのビジネスロジック層と接続したりして、データの管理を行います。