今まで出てきたButtonとか、TextBoxなどのコントロールにはAnchorの他に、Dockというプロパティがあります。これを設定することにより親フォームの大きさが変更になると、そのクライアント領域のどこかにくっついて伸び縮みします。
たとえば、クライアント領域に上辺を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