当我在设计器视图中打开表单时,VS 2010似乎正在更新我的表单的designer.cs文件。
例如,假设我有一个带有System.Windows.Forms.Label类型标签的表单,我创建了标签,使得设计器文件具有(自动生成的代码)
this.myLabel.AutoSize = true;
this.myLabel.Font = new System.Drawing.Font("Tahoma", 8.25F,
System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.myLabel.Location = new System.Drawing.Point(**25, 63**);
this.myLabel.Name = "myLabel";
this.myLabel.Size = new System.Drawing.Size(**101, 13**);
this.myLabel.TabIndex = 1;
this.myLabel.Text = "A simple windows label.";
当我关闭设计师视图并再次打开它时,VS 2010将有时将其更改为
this.myLabel.AutoSize = true;
this.myLabel.Font = new System.Drawing.Font("Tahoma", 8.25F,
System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.myLabel.Location = new System.Drawing.Point(**29, 78**);
this.myLabel.Name = "myLabel";
this.myLabel.Size = new System.Drawing.Size(**124, 17**);
this.myLabel.TabIndex = 1;
this.myLabel.Text = "A simple windows label.";
当我没有做任何事情而不是打开文件时。
有谁知道为什么会这样?还有其他人经历过这样的事吗?
答案 0 :(得分:5)
功能,而不是错误。该表单最初设计在一台机器上,其视频适配器每英寸点数设置为96.您的机器具有不同的DPI,120。在现代版本的Windows上很容易更改,您选择了125%(中)设置在控制面板+显示屏中。
不同的dpi设置会影响您使用的字体大小。你的代码片段中有一个可见,它是8.25分。一点是1/72英寸。所以文字最初是8.25 * 1/72 = 0.114583英寸高。 dpi为96时,为0.114583 x 96 = 11像素。注意这也解释了为什么你在点大小上加了额外的0.25,它得到了一个很好的整数。
但是现在你的dpi是120,文字是8.25 x 1/72 x 120 = 14像素。文字越来越大,你的控制也需要变得更大,否则会剪掉文字,剪掉掉落的下落。
这是在您加载表单时自动完成的。基本属性是AutoScaleMode,默认设置为Font。和AutoScaleDimensions一样,你会发现它在InitializeComponent()方法的顶部分配。那是记住原始DPI设置的那个。
这也将发生在用户的计算机上。确保表单正确自动缩放。如果您的控件具有不同的字体大小,则可能会遇到一些问题。只需将表单检查回源代码控制,这样就不会重新进行重新缩放。