通常、私は以下の方法を使用して(優雅に)サイズ変更可能なフォームを作成します。
using System.Drawing;
using System.Windows.Forms;
namespace silly
{
public class Form1 : Form
{
private GroupBox g;
private Button b1, b2;
public Form1()
{
Init();
}
private void Init()
{
//create and add controls.
this.Controls.Add(g = new GroupBox());
g.Controls.AddRange(new Control[] {
b1 = new Button(),
b2 = new Button()});
g.Text = "group";
b1.Text = "b1";
b2.Text = "b2!";
b1.AutoSize = b2.AutoSize = true;
g.Resize += new System.EventHandler(g_Resize);
}
private void g_Resize(object sender, System.EventArgs e)
{
b1.Size = b2.Size = new Size(g.ClientSize.Width, g.ClientSize.Height/2);
b1.Location = Point.Empty;
b2.Location = new Point(b1.Left, b1.Bottom);
}
protected override void OnResize(System.EventArgs e)
{
g.Size = this.ClientSize;
g.Location = Point.Empty;
}
}
}
g.ClientSize
ただし、プロパティがプロパティのように機能しないことにすぐに気付くでしょうForm.ClientSize
。私がやっていることはPoint
、値を追加することです。
private readonly static Point grp_zero = new Point(10, 20);
コンポーネントを適切に配置するのに役立ちます。この値を使用して、次のg_Resize
方法でメソッドをリファクタリングできます。
b1.Size = b2.Size = new Size(g.ClientSize.Width - grp_zero.X * 2,
g.ClientSize.Height/2 - grp_zero.X - grp_zero.Y);
b1.Location = grp_zero;
b2.Location = new Point(b1.Left, b1.Bottom);
かなり良い結果が得られました。ただし、の最後にあるInit();
場合、次のコードが見つかります。
g.Font = new Font(g.Font.FontFamily, 28);
またはそのようなものは、grp_zero
サイズを変更する価値があります。
質問
この狂気に対する良い回避策はありますか?職業はなんですか?
試しDock
てみましたが、ボタンがクライアント領域Anchor
を埋めるようにすることができないようです。GroupBox
私がここで求めている効果は、各ボタンがクライアント領域の半分を埋めることです。
前もって感謝します。