今まで、Application.Runメソッドをおまじないのように使ってきました。
まず、Applicationクラスですが、これはSystem.Windows.Forms名前空間で定義されています。
そして、メンバはすべてstaticです。継承はできません。
Application.Runメソッドは3つのオーバーロードバージョンがあります。
今まで使ってきたのは
public static void Run ( Form mainForm )これは、現在のスレッドでメッセージループの実行を開始します。また、指定のフォームを表示します。
メッセージループはイベントの監視を行います。GUIのプログラムでは、イベントの監視が必須です。(ここも参照してみてください)
これに対して、引数無しバージョンは、フォームなしでメッセージループを開始します。
3つめのバージョンは、初めのうちはほとんど使うことが無いと思われます。
Runメソッドは逆にメッセージループを終了してフォームを閉じるのは
public static void Exit ()です。
Applicationクラスを、のぞいたついでにこのクラスのプロパティを2,3見てみましょう。
public static CultureInfo CurrentCulture { get; set; }
現在のスレッドのカルチャ情報を取得・設定します。CultureInfoクラスについてはコンソール編第54章に少しだけ解説が載っています。Application.ExecutablePathは、アプリケーションを開始したパスをファイル名付きで取得します。
これに対して、StartupPathは、ファイル名を含みません。
Application.CompanyNameは、その名の通りアプリケーションに関連づけられた会社名を取得します。
今回は、あんまりたいしたことありませんでした。サンプルでも見てください。
このサンプルでは、クライアント領域をクリックするとプログラムが終了するようにしています。
コントロールがクリックされるとControl.MouseClickイベントが発生します。
このイベントを受信するには、Control.OnMouseClickメソッドをオーバーライドします。 (注:MouseClicイベントや、OnMouseClickメソッドはC#2.0で追加されました。)
// application01.cs
using System;
using System.Drawing;
using System.Windows.Forms;
class application01
{
public static void Main()
{
MyForm mf = new MyForm();
Application.Run(mf);
}
}
class MyForm : Form
{
public MyForm()
{
Text = "猫でもわかるプログラミング";
BackColor = SystemColors.Window;
Width = 790;
Height = 180;
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Graphics g = e.Graphics;
String cul = Application.CurrentCulture.EnglishName;
String path = Application.ExecutablePath;
String start = Application.StartupPath;
String comp = Application.CompanyName;
Font font = new Font("MS ゴシック", 12);
g.DrawString(cul, font, Brushes.Black, 10F, 10F);
g.DrawString(path, font, Brushes.Black, 10F, 30F);
g.DrawString(start, font, Brushes.Black, 10F, 50F);
g.DrawString(comp, font, Brushes.Black, 10F, 70F);
}
protected override void OnMouseClick(MouseEventArgs e)
{
base.OnMouseClick(e);
Application.Exit();
}
}
実行結果は次のようになります。
クライアント領域をクリックすると、プログラムが終了します。
Update 23/Oct/2006 By Y.Kumei