MS Access Tips/Sample and VBA and Blog customize etc...

VB.NETで自動バージョンアップ機能付きAccessファイル起動コマンドを作成する その2

前回の記事で、基本的な機能は完成しました。今回は、もう少し格好良いものにしていきます。

具体的には、メッモージボックスでアップデイトするか確認するのではなく、ウィンドウ上にメッセージとボタンを配置して確認する。
と、
アニメーションGIF を表示させて処理中であることを明確にアピールする。
です。

自動バージョンアップ_スプラッシュスクリーン

難易度:

メッセージとボタンを表示

メッセージボックス代わりに、フォーム上に、パネルを配置して、そこにラベルとボタンを配置することにします。

ツールボックスの「コンテナー」グループに「Panel」がありますので、それをフォーム上にドロップします。
画面下半分を覆うようにします。(Panel1)
Panel1 の Visible プロパティは False にしておきます。

Panel1上に、Label と Buttonを2個配置します。(Label3, Button1, Button2)

Label1のTextを
更新されたファイルがあります。
アップデイトしますか。
と設定します。フォントサイズ等をお好みに変更します。

Button1 の Text は「はい」、Button2 の Text は「後で」とします。

フォームデザイン

各イベントの処理の割り当ては下記のようになります。

フォームのShownイベント
バージョンチェックして更新されたファイルがあれば Panel1 を表示。
なければAccessファイルを開いて、自分は終了。

Button1 のクリック時イベント
サーバーの更新ファイルを上書きコピー
Accessファイルを開く。
終了。

Button2 のクリック時イベント
Accessファイルを開く。
終了。

フォームの全コードは下記のようになります。

アニメーションGIF を表示。

まずはアニメーションGIFを作成しますが、「loading gif」辺りをキーワードにWEB検索すれば、サンプルやジェネレーターが見つかりますので、そこで希望のものをさがせばいいでしょう。

今回は、下記のジェネレーターで作成しました。

Loader Generator - Ajax loader

作成したアニメーションGIF

ローディング用アニメーションGIF

フォーム上にコモンコントロール内の PictureBox を配置します。
プロパティの Image のビルドボタンを押して、「リソースの選択」ダイアログの[インポート]ボタンをクリックして、作成したアニメーションGIFファイルを選択します。

配置位置は、Panel1上のボタンの位置ぐらいがいいでしょう。配置してから右クリックして、「最背面に移動」をクリックしてPanel1の裏に隠れるようにします。

これでスプラッシュスクリーンにアニメーションが表示されるですが、サーバーのDBに接続するのに時間がかかったり、ファイルコピー中はあにアニメーションが泊まる場合があります。

マルチスレッド

これを解決するには、マルチスレッドで重い処理を別スレッドで実行するようにすればいいでしょう。

通常はマルチスレッドプログラミングはかなり難易度が高いものなのですが、VB.NETでは「Background Workerオブジェクト」を利用すれば簡単に実現できます。

ツールボックスの「コンポーネント」グループにある[BackgroundWorker]をフォーム上にドロップします。

BackgroundWorkerコンポーネント

上図のようにフォームデザインウィンドウの下部に配置されますので、それを選択してダブルクリックします。コードエディターに DoWorkイベントのプロシージャができますので、そこに別スレッドで実行したい処理を記述します。
また、RunWorkerCompleted イベントには処理終了後に実行したいコードを記述します。

まずは、フォームのShownイベントのコードを切り取って、DoWorkイベントに貼り付けます。ただし、DoWorkイベントからはフォームのオブジェクトにはアクセスできないので、アクセスする部分は、RunWorkerCompletedイベントに記述します。バージョンチェックの結果は e.Result でDoWorkからRunWorkerCompletedに渡します。

DoWorkの処理を呼び出す RunWorkerAsyncメソッドを、Shownイベントに記述します。

これで、サーバーのデータベースファイルに接続するのに時間がかかってもアニメーションが止まることはなくなります。

次はファイルコピーも別スレッドにしましょう。ツールボックスからさらに[BackgroundWorker]をドロップします。(BackgroundWorker2)
このDoWorkイベントにファイルコピーのコードを記述して、RunWorkerCompleted にコピー後の処理を記述します。
Button1_Click からRunWorkerAsyncでこの処理を別スレッドで呼び出します。

これで完成です。

フォームの全コードは下記になります。


拍手する

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/425-92d88f87
該当の記事は見つかりませんでした。