Toj*_*oji 2 .net c# autoscalemode
我在应用程序中使用表单字体大小正确缩放控件时遇到了一些麻烦.问题是表单动态添加控件以响应用户操作.当字体大小初始设置时,表单上的任何控件都可以完美缩放,但之后添加的控件会出现问题.它们的字体适当缩放,但它们的位置和大小不适合.要查看此操作,请使用空表单创建一个简单项目并粘贴以下代码:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在添加的第二个组框中看到我正在谈论的效果.在初始尺寸更改后,如何正确缩放控件,我该怎么办?
UPDATE
如果我将第二个NewGroup调用更改为如下所示:
GroupBox group = NewGroup();
split.Panel2.Controls.Add(group);
group.Scale(new SizeF(2.0f, 2.0f));
Run Code Online (Sandbox Code Playgroud)
结果几乎是正确的.在许多情况下,它往往偏离一两个像素,并且在复杂的形式中,这开始显得更加明显.我真的需要缩放在控件之间尽可能保持一致,所以我想避免这种方法.
小智 8
问题是,对AutoScaleMode = AutoScaleMode.Font的调用必须在所有控件放在窗体上之后出现.自动缩放后,将忽略设置AutoScaleMode后放置的所有控件.通常,Designer会将autoscalemode的设置放入InitializeComponents() - Method中,因此在InitializeComponents() - Method之后创建的每个控件都会进入ignore-category.只需从InitializeComponents() - Method中删除该行,并将其替换为表单构造函数的末尾.
(即使问题很老,答案也可能对其他人有帮助)
| 归档时间: |
|
| 查看次数: |
3760 次 |
| 最近记录: |