我一直在使用表單字體大小正確地在應用程序中縮放控件。問題在於表單動態添加控件以響應用戶操作。當初始設置字體大小時,窗體上的任何控件均可完美縮放,但之後添加的控件有問題。他們的字體正確縮放,但是他們的位置和大小卻沒有。要看到這個動作,用一個空的表單創建一個簡單的項目,並在下面的代碼粘貼:AutoScaleMode.Font和動態添加的控件
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
SplitContainer split = new SplitContainer();
split.Dock = DockStyle.Fill;
this.Controls.Add(split);
// Group 1
split.Panel1.Controls.Add(NewGroup());
this.Font = new Font(this.Font.FontFamily, this.Font.Size * 2);
// Group 2
split.Panel2.Controls.Add(NewGroup());
split.SplitterDistance = this.Width/2;
}
public GroupBox NewGroup()
{
GroupBox groupBox = new GroupBox();
groupBox.Size = new System.Drawing.Size(132, 92);
groupBox.Text = "groupBox";
groupBox.SuspendLayout();
Label label = new Label();
label.AutoSize = true;
label.Location = new Point(6, 16);
label.Text = "label";
groupBox.Controls.Add(label);
Button button = new Button();
button.Location = new Point(6, 58);
button.Size = new Size(93, 28);
button.Text = "button";
groupBox.Controls.Add(button);
CheckBox checkBox = new CheckBox();
checkBox.AutoSize = true;
checkBox.Location = new Point(47, 16);
checkBox.Text = "checkBox";
groupBox.Controls.Add(checkBox);
TextBox textBox = new TextBox();
textBox.Location = new Point(6, 34);
textBox.Size = new Size(120, 20);
textBox.Text = "text";
groupBox.Controls.Add(textBox);
groupBox.ResumeLayout();
return groupBox;
}
}
你可以看到,我在談論中添加的第二組框的效果。如何在初始大小更改後添加控件以正確縮放?
UPDATE
如果我改變第二NewGroup
調用這個樣子:
GroupBox group = NewGroup();
split.Panel2.Controls.Add(group);
group.Scale(new SizeF(2.0f, 2.0f));
結果幾乎是正確的。在很多情況下,它往往會被一個像素或兩個像素所關閉,而在複雜的形式中,這開始顯現得更加明顯。我真的需要在控件之間儘可能保持一致,所以我想避免這種方法。
我也有這些問題。 – Eric 2010-05-17 16:30:51