そもそも、FormクラスはObjectクラスを開始点として何代か継承されてきたクラスです。
System.Object System.MarshalByRefObject System.ComponentModel.Component System.Windows.Forms.Control System.Windows.Forms.ScrollableControl System.Windows.Forms.ContainerControl System.Windows.Forms.FormFormクラスの持つ多数のメンバのうちかなりの部分は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