通常,我使用下面的方法編寫可調整大小(優雅地)的表單。.Net GroupBox中的定位控件
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
客戶區。我在此之後的效果是每個按鈕都填滿了他的一半客戶區域。
在此先感謝。
我打算建議錨和碼頭。我看不出它有什麼問題。 – sloth 2011-02-11 15:45:10
儘管你不喜歡他們,他們在那裏,所以你可以做你想做的事情。你可以點擊你的方式,也可以嘗試用代碼分開。我更喜歡點擊。 – 2011-02-11 15:48:51