将控件添加到FlowLayoutPanel的奇怪行为

时间:2013-11-26 16:18:24

标签: c# .net winforms flowlayoutpanel

我有这个问题,我无法解决:我有一个宽度为240的FlowLayoutPanel;我创建了一个宽度相同的自定义控件,然后以编程方式将其添加到我的面板中。 我希望它完全适合,但事实并非如此。 我添加的控件看起来比面板大得多。

有趣的是,我在调试期间检查了面板和控件的宽度,它们仍然是240 ......

有什么想法吗?提前谢谢!

1 个答案:

答案 0 :(得分:1)

UserControl就像表单一样,记住它来自何处。这里的诊断是它是在一台机器上设计的,它的视频适配器的每英寸点数设置的值高于你尝试使用它的机器。因此,Winforms会补偿差异并重新调整控件以匹配其原始设计大小 inches 。因此,像素中控件的Size属性会因DPI比率而变大。

您可以通过查看UserControl的Designer.cs文件来诊断它。滚动到InitializeComponent()方法的底部,直到看到:

  this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
  this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

AutoScaleDimensions属性值正在进行此记忆。显示的值与以96 DPI运行的机器相关。将它与表单的Designer.cs文件中的相同属性赋值进行比较,期望存在不匹配。

只需编辑用户控件的Designer.cs文件中的值以使其与表单的值匹配即可解决此问题。但是,您必须检查图像是否仍与其他控件正确对齐,并且字体仍然适合控件。除非您保留默认设置,否则它们将不会继承父项。容易看出出错了。一般情况下,通过将您使用的机器保持在相同的设置,避免麻烦。