Help us understand the problem. What is going on with this article?

C#のFormの位置と寸法

More than 1 year has passed since last update.

image.png

C#のフォームをピッタリ並べたい。でもスキマが開く。なぜだ!!


FormのRectangle型のプロパティは5個くらいある。

用途によって使い分けるが、試しに2つの領域を書き重ねてみた。

image.png

オレンジがDesktopBounds、ライムがDisplayRectangleをRectangleToScreenで移動したもの。

DesktopBoundsでは影のエフェクトも含む領域となり、これを使って並べると隙間が開く。
RectangleToScreen(DisplayRectangle)ではタイトルバーを含めることができず、これを使って並べると一部が重なってしまう。


static class MyExt
{
    public static Rectangle hoge(this Form form)
    {
        Rectangle a = form.DesktopBounds;
        Rectangle b = form.RectangleToScreen(form.DisplayRectangle);

        return (new Rectangle(b.X, a.Y, b.Width, b.Y - a.Y + b.Height));
    }
}

こういう感じの計算で、それっぽい矩形を得られる。

image.png


こんな感じのコードを書くと

Form a = new Form()
{
    Text = "a",
    StartPosition = FormStartPosition.Manual,
    Location = Location + new Size(this.hoge().Width, 0),
};
a.Show();

Form b = new Form()
{
    Text = "b",
    StartPosition = FormStartPosition.Manual,
    Location = a.Location + new Size(a.hoge().Width, 0),
};
b.Show();

Form c = new Form()
{
    Text = "c",
    StartPosition = FormStartPosition.Manual,
    Location = b.Location + new Size(b.hoge().Width, 0),
};
c.Show();

Form d = new Form()
{
    Text = "d",
    StartPosition = FormStartPosition.Manual,
    Location = a.Location + new Size(0, a.hoge().Height),
};
d.Show();

Form e = new Form()
{
    Text = "e",
    StartPosition = FormStartPosition.Manual,
    Location = d.Location + new Size(d.hoge().Width, 0),
};
e.Show();

Form f = new Form()
{
    Text = "f",
    StartPosition = FormStartPosition.Manual,
    Location = e.Location + new Size(e.hoge().Width, 0),
};
f.Show();

いい感じに並べられる。

image.png

ただ、影で立体感が出てしまうので、そのあたりは好みが分かれるかも。
あと無理に並べると、画面解像度が足りない場合に飛び出るので注意。

amutou
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away