2015-12-11 92 views
1

我使用.NET CF与Visual Studio 2008动态改变按钮大小

在自动生成的Form.Designer.cs有下面的代码指定按钮尺寸:

this.buttonX.Size = new System.Drawing.Size(96, 24); 

但是当我使用即使在我的构造函数维度中的相同代码“吓坏了”,按钮也小得多。

public FormX() 
{ 
    InitializeComponent(); 
    this.buttonX.Size = new System.Drawing.Size(96, 24); 
} 

正如所看到的屏幕截图,左侧工作正常,并在右边,我从我的构造函数改变尺寸和按键较小...

编辑:只是为了澄清,按钮在设计器视图中创建,我想在之后动态更改按钮大小(只是大小)。

enter image description here

回答

2

问题是由自动缩放造成的。您的开发机器具有与您的设备不同的DPI设置。在生成的代码中,实际存储了开发DPI设置,并通过与设备DPI进行比较来用于缩放控件的高度和宽度。

查看https://msdn.microsoft.com/en-us/library/system.windows.forms.autoscalemode(v=vs.90).aspx了解更多信息,此外还有大量关于此主题的文章。

您可以自行更改AutoScaleMode并自己管理所有尺寸(How to make compact framework custom controls AutoScale aware),或者您可以应用手动调整控件尺寸时框架执行的相同尺寸调整。


如果控制已经存在,你只是想调整它的大小,你仍然可以缩放大小自己,类同什么在一些链接的文章的完成。

像这样的东西(自由0hand,没有语法检查):

SizeF scale = this.AutoScaleFactor; 
Size desiredSize = new Size(96, 24); 
SizeF calculatedSize = new SizeF(desiredSize.Width * scale.Width, desiredSize.Height * scale.Height); 
this.buttonX.Size = calculatedSize.ToSize(); 
+0

当我试图通过@ Damon8or在你提供的链接提供的解决方案,这是发生了什么事:HTTP://服用。 MS/hn8oH。 另外我试着手动调用'buttonX.Scale()'就像@Heinzi提供的他的问题,并导致正确的按钮大小,但扔掉了屏幕上的按钮.. 我的问题是,Form.cs处理大小不同于由Visual Studio Designer视图自动生成的Form.Designer.cs .. – Kristian

+0

看看版本。它利用'AutoScaleFactor'来确定设计时间与运行时间DPI之间的差异,并调整新尺寸的应用。 – tcarvin

+0

还是一样的结果...以防万一用完全新的空项目来尝试它。通过设计器视图创建了两个按钮,并从“Form1_Load”更改了第二个按钮尺寸,然后按钮比预期的要小...设计器中的尺寸与我的PDA的屏幕分辨率相匹配。 – Kristian