自动缩放在winform应用程序中不起作用
本文关键字:应用程序 不起作用 winform 缩放 | 更新日期: 2023-09-27 18:10:33
自动缩放属性不能正常工作。WinForm是以高分辨率开发的。但是当我们在windows XP的较低版本中部署时,有些按钮没有显示出来。
我已经尝试了几个修改建议在谷歌,但似乎没有工作。这是我的winform配置。
this.AutoScaleDimensions = new System.Drawing.SizeF(grap.DpiX, grap.DpiY);
// this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.AutoSize = true;
this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
this.BackColor = System.Drawing.SystemColors.ControlLight;
this.ClientSize = new System.Drawing.Size(1366, 50);
this.DockTop = true;
this.Font = new System.Drawing.Font("MS Reference Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
关于如何处理这个问题的建议可能会有所帮助。
这是由于控件的流动性造成的问题。
要解决这个问题,你需要在低分辨率下设计你的表单(意味着在做表单设计时,你必须保持其宽度和高度低于1024*768)。然后,您必须设置窗体中每个控件的Anchor属性,以定位其正确的位置。
例如:假设你有一个Datagridview在你的表单,那么你必须设置它的锚属性为顶部,底部,左,右。
为每个控件适当设置Anchor属性将使窗体中的控件在窗体调整大小时被拉伸。
希望这对你有帮助
在设置表单尺寸的过程中,表单尺寸受到Screen的限制。GetWorkingArea而不考虑AutoScale。
我解决了这个问题,存储原来的ClientSize设置在InitializeComponent()和重置它自动缩放HandleCreated事件。
private SizeF _autoScaleFactor;
private Size _originalClientSize;
protected override void SetClientSizeCore(int x, int y)
{
base.SetClientSizeCore(x, y);
_autoScaleFactor = AutoScaleFactor;
_originalClientSize = new Size(x, y);
}
protected override void OnHandleCreated(EventArgs e)
{
AutoScaleClientSize();
base.OnHandleCreated(e);
}
private void AutoScaleClientSize()
{
var dx = _autoScaleFactor.Width;
if (!dx.Equals(1.0F))
{
_originalClientSize.Width = (int)Math.Round(_originalClientSize.Width * dx);
}
var dy = _autoScaleFactor.Height;
if (!dy.Equals(1.0F))
{
_originalClientSize.Height = (int)Math.Round(_originalClientSize.Height * dy);
}
ClientSize = _originalClientSize;
}