У меня были некоторые проблемы с масштабированием элементов управления в моем приложении должным образом с размером шрифта формы. Проблема в том, что форма динамически добавляет элементы управления в ответ на действия пользователя. Любые элементы управления, которые находятся в форме, когда размер шрифта изначально установлен отлично, но у тех, которые добавлены впоследствии, есть проблемы. Их шрифт правильно масштабируется, а их положение и размер - нет. Чтобы увидеть это в действии, создайте простой проект с пустой формой и вставьте следующий код:
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));
Результат почти верен. Во многих случаях он имеет тенденцию к отключению на один или два пикселя, и в сложных формах это начинает проявляться гораздо заметнее. Мне действительно нужно, чтобы масштабирование было как можно более согласованным между элементами управления, поэтому я бы хотел избежать такого подхода.