第5回 Windowsアプリケーションのデバッグ&リリース:連載簡単!Visual Studio .NET入門(3/5 ページ)
バグはどうやってつぶすのか? 完成したアプリケーションはどうやってリリースするのか? VS.NET入門の最終章。
なおVS.NETでは、このthis.Close()メソッドを入力する際、「this.」と入力すると、そのthis(=Displayオブジェクト)に含まれるメンバの一覧が自動的に表示される。これは、IntelliSense(インテリセンス)と呼ばれるVS.NETの機能である。IntelliSenseは、[Ctrl]+[スペース]キーを押すことで、手動で表示することもできる。また、文字の入力途中で[Ctrl]+[スペース]キーを押すと、コードの入力を補完してくれる。IntelliSenseを使いこなせば開発生産性を高めることができるので、ぜひ使い慣れてほしい。
VS.NETのIntelliSense(インテリセンス)機能
IntelliSenseは、基本的にIDEによって自動的に表示されるが、[Ctrl]+[スペース]キーを押すことで、手動で表示することもできる。いったんIntelliSenseを閉じてしまった後に、IntelliSenseを再表示したい場合には[Ctrl]+[スペース]キーを利用すればよい。
以上で、アプリケーションを終了する機能を実装できた。これを再度ビルドして実行すると、今度は実際にアプリケーションが終了するようになったはずだ。
次に、「フォームがフェード・アウトしながら終了する機能」を実装しよう。
■フォームのフェード・アウト機能の実装
ここでは、フォームのフェード・アウトを行う、次のようなシグネチャのメソッドを追加しよう。
private void FormFadeOut();
このメソッドをソース・コードに書き込めばよいわけだが、ここではVS.NET IDEのウィザード機能([C# メソッド ウィザード]ダイアログ)を使って書き込んでみる(ただしこのウィザードはC#のみ。VB.NETは手動で書き込む必要がある)。
フォームのフェード・アウトを行うメソッドの追加
VS.NETの[C# メソッド ウィザード]を使って、「private void FormFadeOut()」というシグネチャのメソッドを追加しているところ。このメソッドは、フォームのフェード・アウトを行う。
(1)[クラス ビュー]ウィンドウを表示する。表示するには、メニュー・バーから[表示]−[クラス ビュー]を選択すればよい。クラス・ビューは、アプリケーションのクラス構成をツリー形式で表示するウィンドウである。
(2)[クラス ビュー]ウィンドウの中にあるフォーム・クラス(=「Display」クラス)を右クリックしてコンテキスト・メニューを表示し、そのメニューから[追加]−[メソッドの追加]を選択する。すると、[C# メソッド ウィザード]ダイアログが表示される。
(3)[メソッド アクセス]修飾子(この例では「private」)を選択する。
(4)[戻り値の型](この例では「void」)を指定する。
(5)[メソッド名](この例では「FormFadeOut」)を入力する。
(6)この例ではメソッドのパラメータは不要なので、[完了]ボタンをクリックしてメソッドの追加を完了する。すると、ソース・ファイル内に「private void FormFadeOut()」というメソッドのコードが自動的に入力される。
フォームのフェード・アウトを行うメソッド「FormFadeOut」の追加が終わったら、先ほど実装した「アプリケーションを終了する処理」の前に、そのFormFadeOutメソッドを呼び出すようにしよう。具体的には、次のようなコードになる。
private void menuItemClose_Click(object sender, System.EventArgs e)
{
// フォームをフェード・アウトする
FormFadeOut();
// フォームを閉じる → アプリケーションを終了する
this.Close();
}
private void FormFadeOut()
{
}
仕上げとして、実際のフェード・アウト処理をFormFadeOutメソッド内に記述する。フェード・アウトとは徐々にウィンドウが見えなくなっていくことなので、現在50%の不透明度(前回の解説でOpacityプロパティを50%に指定した)を49、48、47……と、1つずつ減らしていけばよい(不透明度が減っていく=透明になっていく)。ただし、単に減らすだけだと、コンピュータ(CPU処理)のスピードは非常に速いので、あっという間に0%まで減ってしまう。そこで、1%減るごとに1ミリ秒だけ処理を停止することにしよう(処理の停止には、System.Threading名前空間に所属するThreadクラスの静的メソッドSleepを使えばよい)。これにより少し時間をかけてフェード・アウトするようになる。
このフェード・アウト処理を実装したのが、次のコードである(※実はコード内に正しくない部分があるが、これは以降の説明のための故意の誤りである)。
private void FormFadeOut()
{
for (int n = 49; n >= 0; n++)
{
// 49%から1%ずつ不透明度を少なくする(=透明になる)
this.Opacity = (double)n / 100;
// 1%減るごとに1ミリ秒処理を停止する
System.Threading.Thread.Sleep(1);
}
}
ここまででコーディングは完了である。
さっそく、完成したソース・コードをビルドして実行してみよう。実行した「時計」アプリケーションのフォーム上で右クリックしてコンテキスト・メニューを表示し、そのメニューから[終了]を選択すると、次の画面のように、アプリケーションがフリーズして「応答なし」の状態になってしまった。これは先ほど実装したコードに何らかのバグがあるためと考えられる。
バグのあるプログラムの実行画面
バグのあるプログラムを実行したところ。また、そのアプリケーションを強制終了しているところ。
(1)[終了]を実行すると、アプリケーションがフリーズして「応答なし」の状態になってしまう。
(2)アプリケーションを終了するには、[Ctrl]+[Alt]+[Del]キーで表示される[Windows タスク マネージャ]から終了したいアプリケーションを選択する。
(3)[タスクの終了]ボタンをクリックすれば、選択したアプリケーションが強制終了する。
このアプリケーションには、「バグ(Bug)」があるためそれを取り除く「デバッグ(Debug)」が必要となる。よって次に、そのデバッグ方法について解説する(バグの個所はお気づきの方も多いだろうが、ここでは目をつぶっていていただきたい)。
Copyright© Digital Advantage Corp. All Rights Reserved.