アプリケーションのコントロールをフォームのフォント サイズで適切にスケーリングするのに問題があります。問題は、フォームがユーザーのアクションに応じてコントロールを動的に追加することです。フォント サイズが最初に設定されたときにフォーム上にあるコントロールはすべて完全にスケーリングされますが、後で追加されるコントロールには問題があります。フォントは適切にスケーリングされますが、位置とサイズは異なります。これを実際に確認するには、空のフォームで簡単なプロジェクトを作成し、次のコードを貼り付けます。
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;
}
}
私が話している効果は、追加された 2 番目のグループボックスで確認できます。最初のサイズ変更後にコントロールを追加して正しくスケーリングするにはどうすればよいですか?
アップデート
NewGroup
2 番目の呼び出しを次のように変更すると:
GroupBox group = NewGroup();
split.Panel2.Controls.Add(group);
group.Scale(new SizeF(2.0f, 2.0f));
結果はほぼ正しいです。多くの場合、1 ピクセルか 2 ピクセルずれている傾向があり、複雑な形状では、これがより顕著に現れ始めます。コントロール間で可能な限り一貫したスケーリングが必要なので、このアプローチは避けたいと思います。