J'ai eu quelques problèmes de mise à l'échelle des contrôles dans mon application correctement avec la taille de police du formulaire. Le problème est que le formulaire ajoute dynamiquement des contrôles en réponse aux actions de l'utilisateur. Tous les contrôles qui se trouvent sur le formulaire lorsque la taille de la police est initialement définie s'équilibrent parfaitement, mais ceux qui sont ajoutés par la suite présentent des problèmes. Leur police est correctement mise à l'échelle, mais pas leur position ni leur taille. Pour voir en action, créer un projet simple avec une forme vide et coller dans le code suivant:Contrôles AutoScaleMode.Font et ajoutés dynamiquement
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;
}
}
Vous pouvez voir l'effet que je parle dans le deuxième groupbox ajouté. Que puis-je faire pour ajouter des contrôles après le changement de taille initial à l'échelle correctement?
MISE À JOUR
Si je change la deuxième NewGroup
appel à ressembler à ceci:
GroupBox group = NewGroup();
split.Panel2.Controls.Add(group);
group.Scale(new SizeF(2.0f, 2.0f));
Le résultat est presque correct. Dans de nombreux cas, il a tendance à être décalé d'un pixel ou deux, et dans des formes complexes, cela commence à apparaître beaucoup plus visiblement. J'ai vraiment besoin de la mise à l'échelle pour être aussi cohérente que possible entre les contrôles, donc je voudrais éviter cette approche.
J'ai aussi ces problèmes. – Eric