2.1 フォームの表示
2.1.1 GUI アプリケーションを作る
C言語 + Win32 API では、多くの場合はコンパイラで特別なオプションを設定して WinMain() 関数から開始するようにしなければなりませんでしたが、.NET の場合は GUI アプリケーションを作る場合でも特にそのような設定は必要なく、コマンドラインプログラムと同様に Main() メソッドから開始することができます。
GUI アプリケーションの開発には、主に System.Windows.Forms 名前空間のクラスを利用するため、まずはこの名前空間をインポートするように記述します。そして、System.Windows.Forms.Form クラスをインスタンスかすることでウィンドウを生成することができます。.NET Framework では Form クラスで作成するウィンドウのことをフォームと呼んでいます。
System.Object System.MarshalByRefObject System.ComponentModel.Component System.Windows.Forms.Control System.Windows.Forms.ScrollableControl System.Windows.Forms.ContainerControl System.Windows.Forms.Form
public class Form : ContainerControl
フォームの定義としては、ユーザーに対する情報の表示や、ユーザーからの情報の受け取りのために画面に表示される(多くの場合は矩形)の領域を表します。ウィンドウもフォームのひとつですが、このほかにダイアログ、MDI ウィンドウなどもフォームに含まれます。
Form クラスの階層を見るとずいぶんと複雑に見えますが、上層クラスについてはそれほど意識する必要はありません。重要な部分としては、GUI コントロールとなるすべてのクラスは必ず System.Windows.Forms.Control クラスを継承しているということです。よって、Control クラスの機能を学習することで、あらゆるコントロールの基本的な操作ができるようになります。
Form クラスのインスタンスを生成することでアプリケーションのメインウィンドウを構築することができますが、これだけでは Form インスタンスを生成した直後に Main() メソッドを終了してアプリケーションを終了させてしまいます。ウィンドウを表示して正しく動作させるには System.Windows.Forms.Application クラスの静的な Run() メソッドを呼び出します。
System.Object System.Windows.Forms.Application
public sealed class Application
Application クラスは、アプリケーションを開始および停止するメソッドや、アプリケーションの情報を取得するためのプロパティなど、Windows アプリケーション構築のための基本的なメソッドを公開しています。
GUI アプリケーションの場合は、コマンドラインのようなプログラム主導の制御ではなく、ユーザーがウィンドウ上でマウスをクリックしたり、キーボードのボタンを押すなどのイベントにプログラムが反応する形で処理を進めます。このような性質をイベントドリブンと呼びます。フォームを表示するだけではイベントを受け取ることができません。GUI アプリケーションを開始するには、アプリケーションがユーザーのイベントを監視するためのメッセージループを作る必要があります。
アプリケーションがメッセージループを実行してユーザーのイベントを監視するには Application クラスの Run() メソッドを呼び出します。Run() メソッドはメソッドを呼び出したスレッドでメッセージループを開始するため、メッセージループを終了させるまで制御が返らないことに注意してください。
public static void Run(Form mainForm)
mainForm パラメータには、アプリケーションのメインウィンドウとなるフォームを指定します。このフォームが閉じられるとメッセージループを抜け出します。簡単なアプリケーションを作るには、Main() メソッド内で Form インスタンスを生成して Application.Run() メソッドに渡すことで実現することができます。
さっそくプログラムを書いてみましょう。
using System.Windows.Forms; public class Test { static void Main() { Application.Run(new Form()); } }
コード1を見ていただければ、.NET アプリケーションの開発がどれだけシンプルなものかご理解いただけるでしょう。従来のC言語 + Win32 API によるプログラミングでは、上記のプログラムと同じことをする場合でもウィンドウクラスの登録、メッセージループの記述、ウィンドウプロシージャなど、ウィンドウを正しく維持するためのさまざまな手続きが必要でした。それに比べれば、.NET の場合はわずか10行以内でウィンドウを表示させるプログラムを作ることができます。
コード1を実行してウィンドウを表示させてみてください。ウィンドウのタイトルバーをドラッグすればウィンドウは正しく位置を変更しますし、閉じるボタンを押せば正常にアプリケーションが終了します。