Microsoft Visual Basic Express スタート キット
スタート キット : スケジューラ
概要
このスタートキットで学ぶポイント
はじめに
スケジューラの動作
拡張
参照項目
概要
スケジューラは、スケジュールを管理するためのアプリケーションです。スケジュールの開始日時、終了日時、内容、場所、メモを入力して管理することができます。一月単位、二月単位、一日単位のスケジュールをスプリッタで区切って同時に表示できるので便利です。
このスタートキットで学ぶポイント
- GDI+ - グラフィックスとテキストの表示を実装します。
- DateTime 構造体 - 日付と時刻を管理します。
- Microsoft Access の MDB ファイルへのアクセス。
- Registry - レジストリからタイムゾーンリストを列挙します。
- Visual Basic 言語。
はじめに
スケジューラのビルドと実行
スケジューラを実行するには
- F5 キーを押してアプリケーションを実行します。
スケジューラが起動します。スケジューラの画面には、今月のスケジュール情報が表示されます。
スケジュールを入力する
スケジューラには、1日の中におさまるスケジュールと複数日にまたがるスケジュールを入力できます。また、スケジュールの繰り返しも設定できます。
1日におさまるスケジュールを入力するには
- [スケジュールの追加] ボタンをクリックします。スケジュール ダイアログボックスが表示されます。
- スケジュールの基本情報を入力します。
スケジュールのタイトル、開始日時、終了日時、場所の情報を入力してください。時間と場所は省略可能です。
複数日にまたがるスケジュールを入力するには
- [スケジュールの追加] ボタンをクリックします。スケジュール ダイアログボックスが表示されます。
- スケジュールの基本情報を入力します。
スケジュールのタイトル、開始日時、終了日時、場所の情報を入力してください。時間と場所は省略可能です。開始日と終了日が異なる場合、複数日にまたがるスケジュールになります。
複数日にまたがるスケジュールを入力するには
- [スケジュールの追加] ボタンをクリックします。スケジュール ダイアログボックスが表示されます。
- スケジュールの基本情報を入力します。
スケジュールのタイトル、開始日時、終了日時、場所の情報を入力してください。時間と場所は省略可能です。開始日と終了日が異なる場合、複数日にまたがるスケジュールになります。 - 繰り返し情報を入力します。
繰り返しの種類を、「毎日」、「毎週」、「毎月」の中から選んでください。そして、繰り返しを終える日にちを設定します。
複数日にまたがるスケジュールの場合、次の制限があります。
スケジュール期間が2日以上の場合:「毎日」は選択不可。
スケジュール期間が8日以上の場合:「毎日」、「毎週」は選択不可。
スケジュール期間が29日以上の場合:「毎日」、「毎週」、「毎月」は選択不可。
スケジュールを編集する
- 編集したいスケジュールを、1ヶ月表示画面または1日表示画面で選択し、[スケジュールの編集] ボタンをクリックします。または、スケジュールをダブルクリックします。
スケジュール ダイアログボックスが表示されます。このダイアログボックスで、スケジュールを追加したときと同様に入力してください。
スケジュールを削除する
- 削除したいスケジュールをクリックして選択し、マウスの右ボタンを押します。ポップアップメニューが表示されます。
- ポップアップメニューで [スケジュールの削除] を選択します。
設定を変更する

表示する週の数を変更するには
- [設定] ボタンをクリックします。
- 「表示」タブで「表示する週の数」を設定します。
1ヶ月表示画面で表示する週の数を4から8の範囲で変更できます。
スケジュールのフォントサイズを変更するには
- [設定] ボタンをクリックします。
- 「表示」タブで「スケジュールのフォントサイズ」を設定します。
1ヶ月表示画面で表示するフォントサイズを7から20の範囲で変更できます。
スケジュール表示の色を変更するには
- [設定] ボタンをクリックします。
- 「表示」タブの「スケジュールの色」リストボックスで、変更したい項目を選択します。
- [色の設定] ボタンを押します。
「色の設定」ダイアログボックスが表示されるので、ここで色を選択します。
画像ファイルを変更するには
- [設定] ボタンをクリックします。
- 「画像」タブの「画像ファイル」リストボックスで、変更したい月の画像ファイルのパスを選択します。
「新しい画像ファイル」テキストボックスに、パスの文字列が表示されます。 - 「新しい画像ファイル」テキストボックスに、新しい画像のパスを入力します。
[参照] ボタンを押してファイルを選択することもできます。
印刷をする

1ヶ月表示画面で表示している月のスケジュールを印刷することができます。
- 印刷したい月のスケジュールを表示し、[印刷] ボタンをクリックします。
印刷プレビュー画面が表示されます。 - 印刷プレビュー画面で、[印刷] ボタンを押してください。
壁紙にスケジュールを描画する

1ヶ月表示画面で表示している月のスケジュールを壁紙に描画することができます。
- 壁紙に表示したい月のスケジュールを表示し、[壁紙へ描画] ボタンをクリックします。
壁紙ダイアログボックスが表示されます。 - 「壁紙へスケジュールを描画する」を選択し、[OK] ボタンを押します。
スケジュールが、半透明の形で壁紙に描画されます。この機能は、壁紙の表示位置の設定が「拡大して表示」のときだけ使用できます。

壁紙を元に戻す
- [壁紙へ描画] ボタンをクリックします。
壁紙ダイアログボックスが表示されます。 - 「元の壁紙に戻す」を選択し、[OK] ボタンを押します。
スケジュールを検索する

スケジュールを任意の文字列で検索することができます。
- [検索] ボタンをクリックします。
「スケジュールの検索」ダイアログボックスが表示されます。 - 「検索文字列」欄に検索したい文字列を入力し、[検索] ボタンをクリックします。
スケジュールのタイトルとメモに含まれる文字列から検索され、見つかった場合は、リストボックスにそのスケジュールが表示されます。 - リストボックス内のスケジュールを選択し、[そのスケジュールの日付に飛ぶ] ボタンを押してください。
スケジューラの動作
スケジューラのプロジェクト ファイルとフォルダ
プロジェクトには、次の Visual Basic ソースコード ファイルとフォルダが含まれています。
FormSchedulerMain.vb | メインフォーム。 |
OptionDialog.vb | 設定ダイアログボックスのフォーム。 |
SearchDialog.vb | 検索ダイアログボックスのフォーム。 |
CalendarCtrl.vb | 1ヶ月単位のカレンダーを表示し、スケジュールを入力する機能を持つユーザーコントロール |
EditScheduleForm.vb | スケジュールの追加・編集を行うダイアログボックスのフォーム。 |
LongScheduleCtrl.vb | 2ヶ月単位のスケジュールを表示するユーザーコントロール |
ScheduleDataClass.vb | 一つ一つのスケジュール情報を管理するクラス。 |
OneDayClass.vb | 1日ごとの情報を管理するクラス。 |
ConfigDataClass.vb | アプリケーションの設定情報を保持するクラス。 |
DeskWallpaper.vb | 壁紙を指定したファイルに変更するクラス。 |
MapImage.vb | MapImage クラスと DeskWallpaper クラスを使用して、壁紙ファイルに透過した画像を重ね合わせた Image ファイルを作成し、壁紙をその Image ファイル変更するクラス。 |
GraphicalButtonCtrl.vb | 半透明やグラデーションのボタンを表示し、管理するユーザーコントロール。 |
CalendarButtonCtrl.vb | GraphicalButtonCtrl クラスを継承し、半透明ボタンにカレンダーを表示するユーザーコントロール |
ArrowButtonCtrl.vb | GraphicalButtonCtrl クラスを継承し、三角形の矢印ボタンを表示するユーザーコントロール |
オプション設定の情報とアプリケーション情報の管理
アプリケーション終了時には、スケジュールのフォントサイズ、色、画像ファイルのパスなどのアプリケーション情報を保存します。これにより、次回アプリケーションが起動したとき、以前の設定情報で表示させることができます。オプション設定の情報、およびアプリケーションの情報は、ConfigDataClassで管理しています。
設定情報やアプリケーション情報は、FormSchedulerMain フォームが表示されるときに LoadConfigdataFile メソッドでロードしています。また、FormSchedulerMain フォームが閉じるときに、SaveConfigDataFile メソッドで保存しています。それぞれ、シリアライズの機能を使って ConfigDataClass オブジェクトの内容をすべて XML ファイルに保存しています。保存先のファイルは、以下のとおりです。
スケジュールデータの保存
アプリケーション終了時に、ユーザーの入力したスケジュールデータは、Microsoft Access の mdb ファイルのデータベースに保存されます。また、開始時には、このデータベースからスケジュールデータを読み出します。
mdbファイルのあるパスは、以下のとおりです。
スケジュールのデータは、Scheduler.mdb ファイル内の Schedules テーブルに保存されます。Schedules テーブルは、次のように定義されています。
Schedules テーブル
フィールド名 | データ型 | サイズ | 説明 |
ID | オートナンバー | − | インデックス |
StartDateTime | テキスト型 | 50 | スケジュールの開始日時 |
EndDateTime | テキスト型 | − | スケジュールの終了日時 |
InputDateTime | テキスト型 | 50 | スケジュールの入力日時 |
Title | テキスト型 | 255 | スケジュールのタイトル |
Place | テキスト型 | 255 | スケジュールの場所 |
MemoData | テキスト型 | 255 | スケジュールの特記事項 |
RepeatStartDate | テキスト型 | 50 | スケジュールを繰り返す場合の開始日(未使用 |
RepeatEndDate | テキスト型 | 50 | スケジュールを繰り返す場合の終了日 |
RepeatType | 数値型 | − | 繰り返しの種類(なし、毎日、毎週、毎月 |
ValidData | Yes/No型 | − | このスケジュールが有効かどうか |
また、各日にちごとのメモ情報は、Scheduler.mdb ファイル内の Memos テーブルに保存されます。Memosテーブルは、次のように定義されています。
Memos テーブル
フィールド名 | データ型 | サイズ | 説明 |
ID | オートナンバー | − | インデックス |
DateData | テキスト型 | 50 | スケジュールの開始日時 |
MemoData | テキスト型 | 255 | メモのテキスト |
拡張
スケジュールの情報をクリップボード経由でテキストエディタや Microsoft Excel にコピーできれば便利です。VB.NET では、クリップボードを簡単に扱うことができます。表示している1ヶ月分のスケジュール情報をクリップボードにコピーできるようにしてみます。実装手順を次に示します。

クリップボードにスケジュールをコピーするには
- CalendarCtrl.vb をデザイナで表示します。
- プロパティ画面で ContextMenuStrip1 コントロールを選択します。
- ContextMenuStrip1 に新しいメニュー項目「この月のスケジュールをクリップボードへコピー(&C)」を追加します。
- 新しく追加したメニュー項目の Name を CopyScheduleToolStripMenuItem に変更します。
- このメニュー項目がクリックされたときのイベント ハンドラを作成します。デザイナ上で、この項目をダブルクリックして、CalendarCtrl.vb 内に CopyScheduleToolStripMenuItem_Click() メソッドを作成してください。
このイベントハンドラを次のように記述します。クリップボードへデータをコピーするには、My.Computer.Clipboard オブジェクトを使用します。
Private Sub CopyScheduleToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CopyScheduleToolStripMenuItem.Click
Dim i As Integer' クリップボードへコピー
Dim bufStr As String = ""
bufStr = bufStr & "開始日時" & ControlChars.Tab & "終了日時" & ControlChars.Tab & _
"予定内容" & ControlChars.Tab & "場所" & Environment.NewLine
For i = 1 To DateTime.DaysInMonth(m_showingMonth.Year, m_showingMonth.Month)
For Each scheduleData As ScheduleDataClass In m_showingMonthDays(i).ScheduleData
If scheduleData.IsValid Then
'スケジュールの内容をバッファへコピー(複数日にまたがるスケジュールは初日だけコピー)
If(scheduleData.IsMultiDays = False) Or _
(scheduleData.IsMultiDays = True And _
m_showingMonthDays(i).DateOfThis.Date = scheduleData.StartDateTime.Date) Then
bufStr = bufStr & scheduleData.StartDateTime.ToString & ControlChars.Tab & _
scheduleData.EndDateTime.ToString & ControlChars.Tab & _
scheduleData.Title & ControlChars.Tab & scheduleData.Place _
& Environment.NewLine
End If
End If
Next
Next
My.Computer.Clipboard.SetText(bufStr)
End Sub- F5 キーを押してアプリケーションを実行します。
参照項目
オンライン情報源
© Microsoft Corporation and/or its suppliers.All rights reserved.Terms of Use.