たとえば、クライアント領域に上辺をDockに設定すると、そのコントロールは上辺いっぱいに広がってくっつきます。Anchorと同時には設定できません。もしした場合は、後からの設定が有効です。
DockプロパティはSystem.Windows.Forms名前空間で定義されています。
public virtual DockStyle Dock { get; set; }プロパティ値のDockStyle列挙体のメンバと意味は次の通りです。
メンバ | 意味 |
---|---|
Bottom | 格納する側の下端にドッキングされる |
Fill | 格納する側の4辺にドッキングされる |
Left | 格納する側の左端にドッキングされる |
None | ドッキングされない |
Right | 格納される側の右端にドッキングされる |
Top | 格納される側の上端にドッキングされる |
では、DockをBottomに設定した2つのコントロールがあったらどうなるのでしょうか。 重なり合ってしまうのでしょうか。後から設定した方が、より下端に行き、その上に次のコントロールがくっつきます。
何はともあれ、サンプルを見てみましょう。
// dock01.cs using System; using System.Drawing; using System.Windows.Forms; class dock01 { public static void Main() { MyForm mf = new MyForm(); MyTextBox mt = new MyTextBox(); mt.Parent = mf; MyButton mb1 = new MyButton(); mb1.Parent = mf; MyClsButton mcls = new MyClsButton(); mcls.Parent = mf; Application.Run(mf); } } class MyForm : Form { public MyForm() { Text = "猫でもわかるC#プログラミング"; BackColor = SystemColors.Window; } } class MyButton : Button { public MyButton() { Text = "押す"; BackColor = SystemColors.Control; Dock = DockStyle.Bottom; } protected override void OnClick(EventArgs e) { base.OnClick(e); MessageBox.Show(Parent.Controls[0].Text, "猫C#", MessageBoxButtons.OK, MessageBoxIcon.Information); } } class MyClsButton : Button { public MyClsButton() { Text = "消す"; BackColor = SystemColors.Control; Dock = DockStyle.Bottom; } protected override void OnClick(EventArgs e) { base.OnClick(e); Parent.Controls[0].Text = ""; Parent.Controls[0].Focus(); } } class MyTextBox : TextBox { public MyTextBox() { Dock = DockStyle.Top; Font = new Font("MS ゴシック", 26); } }テキストボックスは上端に、2つのボタンは下端にドッキングします。「消す」ボタンの方が後から、設定しているので一番下端が「消す」ボタン、その上に「押す」ボタンが来るはずです。
テキストボックスは上端に、「消す」ボタンが一番下端に、その次に「押す」ボタンが来ていますね。
親フォームのサイズが変更になると、自動的に子コントロールのサイズも変更されます。
さて、このプログラムでは「押す」ボタンと「消す」ボタンが別々のクラスとして書かれていますが、これを一つのクラスにして書き直してみてください。
Update 16/Nov/2006 By Y.Kumei