我一直在使用表单字体大小正确地在应用程序中缩放控件。问题在于表单动态添加控件以响应用户操作。当初始设置字体大小时,窗体上的任何控件均可完美缩放,但之后添加的控件有问题。他们的字体正确缩放,但是他们的位置和大小却没有。要看到这个动作,用一个空的表单创建一个简单的项目,并在下面的代码粘贴: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