0

自动缩放属性无法正常工作。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)));

关于如何解决这个问题的建议可能会有所帮助。

4

2 回答 2

0

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

要解决这个问题,您需要以低分辨率设计表单(意味着在进行表单设计时,您必须将其宽度和高度保持在 1024*768 以下)。然后,您必须设置表单中每个控件的Anchor属性以定位其正确位置。

例如:假设您的表单中有一个 Datagridview,那么您必须将其 Anchor 属性设置为 Top, Bottom, Left, Right

为每个控件适当设置 Anchor 属性将使窗体中的控件在窗体调整大小时被拉伸。

希望这可以帮助 :)

于 2013-04-24T09:33:53.403 回答
0

在设置表单尺寸的过程中,表单大小受Screen.GetWorkingArea限制,不考虑AutoScale

我解决了这个问题,存储在InitializeComponent()中设置的原始ClientSize并在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;
    }
于 2018-07-22T19:47:01.450 回答