第32章 コントロールにDockを設定してみる


今まで出てきた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つのボタンは下端にドッキングします。「消す」ボタンの方が後から、設定しているので一番下端が「消す」ボタン、その上に「押す」ボタンが来るはずです。

テキストボックスは上端に、「消す」ボタンが一番下端に、その次に「押す」ボタンが来ていますね。





親フォームのサイズが変更になると、自動的に子コントロールのサイズも変更されます。

さて、このプログラムでは「押す」ボタンと「消す」ボタンが別々のクラスとして書かれていますが、これを一つのクラスにして書き直してみてください。


[C# フォーム Index] [C# コンソール Index] [総合Index] [Previous Chapter] [Next Chapter]

Update 16/Nov/2006 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。