gpt4 book ai didi

c# - AutoScaleMode.Font 和动态添加的控件

转载 作者:行者123 更新时间:2023-11-30 19:50:27 25 4
gpt4 key购买 nike

我一直在使用表单字体大小正确缩放我的应用程序中的控件时遇到一些问题。问题是表单动态添加控件以响应用户操作。当字体大小最初设置为完美缩放时,表单上的任何控件,但后来添加的控件都有问题。它们的字体可以适当缩放,但它们的位置和大小不会。要查看实际效果,请创建一个包含空表单的简单项目并粘贴以下代码:

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;
}
}

您可以在添加的第二个组框中看到我所说的效果。在初始大小更改以正确缩放后,我该怎么做才能添加控件?

更新

如果我将第二个 NewGroup 调用更改为如下所示:

        GroupBox group = NewGroup();
split.Panel2.Controls.Add(group);
group.Scale(new SizeF(2.0f, 2.0f));

结果几乎是正确的。在很多情况下,它往往会偏离一两个像素,而在复杂的形式中,这会开始更加明显。我真的需要控件之间的缩放比例尽可能一致,所以我想避免这种方法。

最佳答案

问题是,调用AutoScaleMode=AutoScaleMode.Font必须在所有控件都放置在窗体上之后出现。在设置 AutoScaleMode 之后放置的所有控件都将被自动缩放忽略。通常,Designer 会将 autoscalemode 的设置放入 InitializeComponents()-Method 中,因此您在 InitializeComponents()-Method 之后创建的每个控件都属于忽略类别。只需从 InitializeComponents()-Method 中删除该行并将其替换为表单构造函数的末尾即可。

(即使是老问题,答案可能对其他人有帮助)

关于c# - AutoScaleMode.Font 和动态添加的控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2298958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com