SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(ComponentOne Studio)

全部入りの安心感! ComponentOne Studioオーバービュー
― Windows Forms編

  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード サンプルソース (97.3 KB)

本格的なスケジューリングアプリ作成を支援「Schedule for Windows Forms」

 スケジューラを作ろうと思った時、まず思い浮かぶのは、グリッドコントロールとカレンダコントロールを連携して作成するようなGUIです。しかし、グリッドコントロールを使ってOutlookの予定表やGoogleカレンダーのような、かっこいいGUIを作るのは意外と大変です。

 Schedule for Windows Formsならば、Windowsフォームにコントロールを貼るだけで図2のようなスケジュール画面が完成します。

図2 Schedule for Windows Formsを配置
図2 Schedule for Windows Formsを配置

 また、スケジュール画面をダブルクリックすれば、図3のダイアログが表示されて予定の記入ができます。

図3 予定記入ダイアログ
図3 予定記入ダイアログ

 注意点としては、図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)実行例
図4 サンプル(CZ1004Sche)実行例
リスト1 Datasetと連携するコード
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
  1. フォームが表示されたときに発生するShownイベントでCZ1004DataAccessクラスのGetRecordメソッドを実行して、取得したデータを予定表に表示
  2. 予定表の内容を変更するとAppointmentAddedイベント、AppointmentChangedイベント、AppointmentDeletedイベントが発生するので、それぞれのイベントの中でデータを格納するためにCZ1004DataAccessクラスのSetRecordメソッドを実行

 リスト1では実際のデータ入出力をCZ1004DataAccessクラスに分離していますが、業務システム構築時であれば、CZ1004DataAccessクラスの中からSQL ServerやOracle DatabaseなどのRDBMSと接続したり、XML Webサービスなどのビジネスロジック層と接続したりして、データの管理を行います。

次のページ
解像度に依存しないフォームレイアウトを実現「Sizer for Windows Forms」

修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
現役エンジニア直伝! 「現場」で使えるコンポーネント活用術(ComponentOne Studio)連載記事一覧

もっと読む

この記事の著者

初音玲(ハツネアキラ)

 国内SIerのSEでパッケージ製品開発を主に行っており、最近は、空間認識や音声認識などを応用した製品を手掛けています。 個人的には、仕事の内容をさらに拡張したHoloLensなどのMRを中心に活動しています。 Microsoft MVP for Windows Development ブログ:http://hatsune.hatenablog.jp/

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5141 2010/04/28 16:16

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング