自动缩放在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)));
关于如何处理这个问题的建议可能会有所帮助。

自动缩放在winform应用程序中不起作用

这是由于控件的流动性造成的问题。

要解决这个问题,你需要在低分辨率下设计你的表单(意味着在做表单设计时,你必须保持其宽度和高度低于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;
    }