子コントロールの追加
コントロールの作成
ウィンドウシステムの特徴は、コントロールの中に別のコントロールを挿入し、それぞれのコントロールに専門的な処理や役割を与えることができることです。
多くの場合は Windows フォームが用意する標準コントロールのインスタンスを生成して、子コントロールとしてフォームに追加する形になるでしょう。標準コントロールには Windows のデスクトップアプリケーションでよく見られるボタンや入力ボックスなどが用意されています。また、必要であれば開発者がカスタムコントロールを作ることもできます。
この場では、すべてのコントロールの基本クラスとなる Control クラスを用いてコントロールをフォームに張り付けます。Control クラスのコンストラクタはオーバーロードされていますが、この場ではパラメータを受け取らないコンストラクタのみを使います。
public Control()
Windows フォーム では Control クラスに子コントロールをコレクションする管理機能があり、これを継承する全てのコントロールにその機能があると考えることができます。
フォームを含め、コントロールに含まれる子コントロールの一覧は Controls プロパティによって表されます。
[BrowsableAttribute(false)] public Control.ControlCollection Controls {get;}
このプロパティは、コントロールが所有する複数の子コントロールを管理する System.Windows.Forms.Control.ControlCollection クラスのオブジェクトを返します
子コントロールの管理は ControlCollection クラスが行います。このクラスは Control クラスの内部で定義される内部クラスです。
[ListBindableAttribute(false)] [ComVisibleAttribute(false)] public class ControlCollection : ArrangedElementCollection, IList, ICollection, IEnumerable, ICloneable
ControlCollection クラスは子コントロールの追加や削除、インデクサによる子コントロールへのアクセスなどの機能を包括的に提供しています。
コントロールを追加するには Add() メソッドを用います。
public virtual void Add(Control value)
value パラメータには追加する子コントロールを指定します。
一度に複数のコントロールを追加する AddRange() メソッドも用意されています。
public virtual void AddRange(Control[] controls)
controls パラメータには、追加するコントロールの配列を指定します。追加するコントロールの数が多い場合、個別に Add() メソッドで追加するよりも AddRange() メソッドで一度に追加したほうが効率的で高速に処理されるでしょう。
これらのメソッドでコントロールを追加すると、コレクションの末尾に追加されます。ちなみに、子コントロールにとって自分を内包する親コントロールのことをコンテナとも呼びます。
using System.Windows.Forms; using System.Drawing; class Test { public static void Main(string[] args) { Control control = new Control(); control.Bounds = new Rectangle(0, 0, 200, 100); control.BackColor = Color.Red; Form form = new Form(); form.Controls.Add(control); Application.Run(form); } }
コード1を実行すると赤で塗りつぶされた長方形領域がフォーム上に表示されます。この赤い長方形が背景色を赤にし設定してフォームに追加した子コントロールです。
ControlCollection クラスは IList インタフェースを実装しているため Control 型のコレクションとしてオブジェクトの追加や削除を行えます。