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


親フォームのサイズが変更になったとき、コントロールの親フォームに対する相対位置を 一定にしたいときには、どうすればよいのでしょうか。



たとえば、常にボタンを親フォームの右・下方に位置したいときはどうすればよいのでしょうか。

もちろん、フォームのサイズが変更になったときに送られてくるResizeイベントを処理してもよいでしょう。しかし、もっと簡単な方法があります。

コントロールのAnchorプロパティを設定すればよいのです。Control.AnchorプロパティはSystem.Windows.Forms名前空間で定義されています。

子コントロールの管理をするFormクラスなどを、コントロールのコンテナと呼ぶことがあります。Anchorはコンテナの端にコントロールを固定する方法を指定するプロパティです。

public virtual AnchorStyles Anchor { get; set; }
プロパティ値のAnchorStyles列挙体のメンバには次のようなものがあります。

メンバ意味
Bottomコントロールがコンテナの下端に固定
Leftコントロールがコンテナの左端に固定
Noneコントロールは固定されない
Rightコントロールはコンテナの右端に固定
Topコントロールはコンテナの上端に固定

通常Anchorを設定する場合は

btn.Anchor = (AnchorStyles.Bottom | AnchorStyles.Right);
のように(上端または下端) | (左端または右端)のように「|」or演算子で組み合わせて使います。Locationプロパティを設定すると、Anchorプロパティの値によって、親フォームがサイズ変更になっても指定の相対位置を守ります。

また、第15章でやったFormクラスのControlsの使い方は重要なので復習しておいてください。

では、サンプルのプログラムを見てみましょう。

// anchor01.cs

using System;
using System.Drawing;
using System.Windows.Forms;

class anchor01 : Form
{
    public static void Main()
    {
        Application.Run(new anchor01());
    }

    public anchor01()
    {
        Text = "猫でもわかるC#プログラミング";
        BackColor = SystemColors.Window;

        //親のControls[0]に相当
        Button btn = new Button();
        btn.Parent = this;
        btn.BackColor = SystemColors.Control;
        btn.Text = "押す";
        btn.Click += new EventHandler(btn_Click);
        btn.Location = new Point(ClientSize.Width - btn.Width - 10, ClientSize.Height - btn.Height - 10);
        btn.Anchor = (AnchorStyles.Bottom | AnchorStyles.Right);

        //親のControls[1]に相当
        TextBox tbox = new TextBox();
        tbox.Parent = this;
        tbox.Location = new Point(10, 10);
        tbox.Anchor = AnchorStyles.Top | AnchorStyles.Left;
    }

    void btn_Click(object sender, EventArgs e)
    {
        Button btn = (Button)sender;
        Form parent = (Form)btn.Parent;
        MessageBox.Show(parent.Controls[1].Text,
            "猫C#",
            MessageBoxButtons.OK,
            MessageBoxIcon.Information);
    }
}
ボタンは、親フォームの右・下に、テキストボックスは左・上に固定されます。

固定される相対位置はLocationプロパティで設定していますね。

ボタンがクリックされたときは親フォームを調べて、そのControls[1]で、テキストボックスの参照を調べています。

では、実行結果を見てみましょう。

テキストボックスは、クライアント領域の左上から上10左10だけ離れた位置にあります。

ボタンは、クライアント領域の右下隅から10づつ離れた位置にあります。



フォームのサイズが変更になっても、それぞれのクライアント領域にある相対位置はかわりません。




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

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