コントロール
UI部品の基底クラス
Windows フォームでは Form クラスを含めたあらゆる UI 部品(ラベル、ボタン、リストなど)が System.Windows.Forms.Control クラスから派生しています。このクラスが持つメンバを理解することで Windows フォームで扱う多くのコントロールを同じように制御できます。
System.Object System.MarshalByRefObject System.ComponentModel.Component System.Windows.Forms.Control public class Control : Component, ISynchronizeInvoke, IWin32Window
Form クラスもまた Control クラスから派生しているため、Control クラスのプロパティやメソッドを用いて操作できます。
多くのコントロールで共通する代表的な設定は Text プロパティです。Text プロパティは、コントロールに関連付けられているテキストを表します。
public virtual string Text {get; set;}
このプロパティに設定されている文字列がどのように表示されるかはコントロールの実装に依存します。ボタンであれば、ボタン上のコンテンツとして設定されている文字列が表示されるでしょう。
Form クラスの Text プロパティの場合、フォームのタイトルバーに表示するテキストを表します。Text プロパティに文字列を設定することで、ウィンドウのタイトルを変更できます。
using System.Windows.Forms; class Test { public static void Main(string[] args) { Form form = new Form(); form.Text = "Kitty on your lap"; Application.Run(form); } }
コード1は生成した Form オブジェクトの Text プロパティに文字列を設定しています。実行結果を見ると、正しくタイトルバー上に設定した文字列がテキストとして表示されていることが確認できます。
前景色と背景色
コントロールには前景色を表す ForeColor プロパティと、背景色を表す BackColor プロパティが用意されています。これらのプロパティがどのように反映されるかはコントロールの実装に依存しますが、例えばボタンなどのコントロールで表示されるテキストの色には ForeColor プロパティの値が用いられるでしょう。
public virtual Color ForeColor { get; set; }
public virtual Color BackColor { get; set; }
これらのプロパティには System.Drawing.Color 構造体の値で前景色や背景色となる色を指定します。
Form オブジェクト自身は前景色を用いるような内容を持ちませんが、背景色を設定すればフォームの背景を指定した色で塗りつぶします。
using System.Windows.Forms; using System.Drawing; class Test { public static void Main(string[] args) { Form form = new Form(); form.BackColor = Color.Red; form.ForeColor = Color.Blue; Application.Run(form); } }
コード2ではフォームの背景色を赤に設定しているため、ウィンドウの内部が赤で塗りつぶされています。前景色も青に設定していますが、フォーム自身には前景色で塗るような内容が含まれていないため、この設定は使われていません。後述するボタンなど、内容を持つコントロールで有効なプロパティです。
位置とサイズ
全てのコントロールには、コントロールを表示する位置とサイズが設定されています。位置やサイズを設定または取得する方法は、いくつか存在します。
コントロールの位置は Location プロパティから設定または取得できます。
public Point Location { get; set; }
このプロパティは System.Drawing.Point 構造体の値でコントロールの座標を表します。Point 構造体の X プロパティと Y プロパティに設定される値は、通常はピクセル単位となります。X 座標の値が大きいほど右に、Y 座標の値が大きいほど下に向かいます。
ウィンドウに配置されているボタンなどのコントロールは、ウィンドウの左上隅を原点とするクライアント座標となります。フォームの場合は、スクリーン全体の原点(通常は画面の左上隅)を基準にしたスクリーン座標となります。
ただし Form クラスのオブジェクトであるフォームは、初期位置の設定項目が独自に存在します。手動でスクリーン座標の位置を設定したい場合は StartPosition プロパティを変更しなければなりません。
[LocalizableAttribute(true)] public FormStartPosition StartPosition { get; set; }
このプロパティは System.Windows.Forms.FormStartPosition 列挙体でフォームを表示したときの初期位置を表します。
[ComVisibleAttribute(true)] public enum FormStartPosition
メンバ | 説明 |
---|---|
CenterParent | 親フォームの中央。 |
CenterScreen | スクリーンの中央。 |
Manual | Location プロパティで指定された座標。 |
WindowsDefaultBounds | Windows によって決定される既定の位置とサイズ。 |
WindowsDefaultLocation | Windows によって決定される既定の位置。 |
StartPosition プロパティに設定されているデフォルトの値は WindowsDefaultLocation メンバです。Location プロパティでフォームの座標を指定したい場合は Manual メンバの値に変更してください。
using System.Windows.Forms; using System.Drawing; class Test { public static void Main(string[] args) { Form form = new Form(); form.StartPosition = FormStartPosition.Manual; form.Location = new Point(0, 0); Application.Run(form); } }
コード3は X 座標と Y 座標がともに 0 の原点にフォームを表示します。
コントロールのサイズを変更するには、幅と高さを設定します。幅は Width プロパティから、高さは Height プロパティから設定または取得できます。値の単位は座標と同じくピクセルです。
[BrowsableAttribute(false)] public int Width { get; set; }
[BrowsableAttribute(false)] public int Height { get; set; }
もしくは幅と高さを 1 つの値とする Size プロパティから設定または取得することも可能です。
public Size Size { get; set; }
Size プロパティは、幅と高さからなる System.Drawing.Size 構造体の値で表されます。
[SerializableAttribute] [TypeConverterAttribute(typeof(SizeConverter))] [ComVisibleAttribute(true)] public struct Size
Width プロパティまたは Height プロパティから幅や高さを個別に設定する方法と、Size プロパティから幅と高さを同時に設定する方法が選択できます。どちらから設定しても、結果は両方のプロパティに反映されます。
また Size 構造体は値型なので、Size プロパティから取得したオブジェクトの値を変更しても、間接的にコントロールのサイズに影響を及ぼすことはありません。
using System.Windows.Forms; using System.Drawing; class Test { public static void Main(string[] args) { Form form = new Form(); form.Width = 400; form.Height = 100; Application.Run(form); } }
コード4は表示するフォームのサイズを変更し、縦に短く横に長いフォームを表示します。
位置とサイズは Location プロパティと Size プロパティで個別に設定する以外に Bounds プロパティを用いて同時に設定または取得することもできます。
[BrowsableAttribute(false)] public Rectangle Bounds { get; set; }
このプロパティは System.Drawing.Rectangle 構造体でコントロールの位置とサイズを表すピクセル単位の長方形領域を指定します。
class Test { public static void Main(string[] args) { Form form = new Form(); form.StartPosition = FormStartPosition.Manual; form.Bounds = new Rectangle(0, 0, 400, 100); Application.Run(form); } }
コード5はスクリーン座標の原点から幅 400 ピクセル、高さ 100 ピクセルのフォームを表示します。
サイズはコントロールの左上隅からピクセル単位での幅と高さになりますが、座標計算や判定のためにコントロールの右端や下の座標を取得したいこともあるでしょう。コントロールの四隅の位置を取得することも可能で、左は Left プロパティ、右は Right プロパティ、上は Top プロパティ、下は Bottom プロパティで表されます。
[BrowsableAttribute(false)] public int Left { get; set; }
[BrowsableAttribute(false)] public int Right { get; }
[BrowsableAttribute(false)] public int Top { get; set; }
[BrowsableAttribute(false)] public int Bottom { get; }
これらのプロパティは読み取り専用なので、設定することはできません。
事実上、Left プロパティは Location プロパティの X 座標に等しく、Top プロパティは Y 座標に等しい値となります。また、Right プロパティの値は X 座標 + 幅であり、Bottom プロパティの値は Y 座標 + 高さとなります。