この章ではFormクラスについて、よく使うプロパティなどについて解説します。
そもそも、FormクラスはObjectクラスを開始点として何代か継承されてきたクラスです。
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Windows.Forms.Control
System.Windows.Forms.ScrollableControl
System.Windows.Forms.ContainerControl
System.Windows.Forms.Form
Formクラスの持つ多数のメンバのうちかなりの部分はControlクラスから継承されてきています。
Formクラスのいくつかのプロパティを見てみましょう。
public override string Text { get; set; }
これは、Control.Textをオーバーライドします。Formクラスではタイトルバーに表示される文字列を取得、設定します。
public override Color BackColor { get; set; }
Control.BackColorをオーバーライドします。コントロールの背景色を取得または設定します。ここで、Colorは構造体です。構造体について忘れてしまった人は、コンソール編第51章を参照してください。Color構造体のpublicプロパティは、Blueとか、Blackとか大文字で始まる色の名前で、読み出し専用です。
この他に、R,G,Bというプロパティがあります。それぞれこの構造体の赤、緑、青のコンポーネントの値を取得します。
では、タイトルバーににタイトルを設定して、背景色が黄色のフォームを作ってみましょう。
// formprop01.cs
using System;
using System.Drawing;
using System.Windows.Forms;
class formprop01 : Form
{
public static void Main()
{
formprop01 f1 = new formprop01();
Application.Run(f1);
}
// コンストラクタ
public formprop01()
{
Text = "猫でもわかるプログラミング";
BackColor = Color.Yellow;
}
}
メンバにMainメソッドを有するformprop01クラスは、Formクラスから継承されています。
コンストラクタformprop01を見てください。自分自身のクラスのプロパティTextに「猫でもわかるプログラミング」を設定しています。また、BackColorプロパティにはColor.Yellow(黄色)を設定しています。
これで、タイトルバーに「猫でもわかるプログラミング」と表示され、背景色が黄色のフォームができるはずです。
では、同じ要領でMainメソッドを有しないクラスをFormから派生して同様のことをしてみましょう。
// formprop02.cs
using System;
using System.Drawing;
using System.Windows.Forms;
class formprop02
{
public static void Main()
{
MyForm mf = new MyForm();
Application.Run(mf);
}
}
class MyForm : Form
{
public MyForm()
{
Text = "猫でもわかるプログラミング";
BackColor = Color.Yellow;
}
}
Mainメソッドを有さないMyFormクラスをFormクラスから派生しています。このMyFormクラスのコンストラクタで、TextとBackColorプロパティを設定しています。
Mainメソッドでは、MyFormクラスのインスタンスを生成して、Application.Runメソッドに渡しています。
実行結果はformprop01.csの時と全く同じです。
では、次にFormを継承しないでFormクラスのインスタンスを作ってみましょう。
// formprop03.cs
using System;
using System.Drawing;
using System.Windows.Forms;
class formprop03
{
public static void Main()
{
Form myform = new Form();
myform.Text = "猫でもわかるプログラミング";
myform.BackColor = Color.Yellow;
Application.Run(myform);
}
}
このプログラムの実行結果も、formprop01.csの時と同じです。このように、簡単なプログラムであれば、この3つの方法のどれを使っても実現できます。
しかし、第3の方法では後に、ちょっと困ったことも起こるということを覚えておいてください。
Update 17/Oct/2006 By Y.Kumei