相关疑难解决方法(0)

AutoScaleMode更改了默认字体的问题

当使用非默认字体时,我有一些Form.AutoScaleMode属性和固定大小控件的问题.我把它归结为一个简单的测试应用程序(WinForms 2.0),只有一个表单,一些固定大小的控件和以下属性:

class Form1 : Form
{
    // ...
    private void InitializeComponent()
    {
        // ...
        this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
        this.Font = new System.Drawing.Font("Tahoma", 9.25F);
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

在96dpi,Windows XP下,表单看起来像这个96 dpi示例:

96 dpi WinForm

在120 dpi,Windows XP下,Windows窗体自动缩放功能产生了这个120 dpi的示例:

之前的WinForm扩展到120 dpi

如您所见,组框,按钮,列表或树视图正确缩放,多行文本框在垂直轴上变得太大,并且固定大小的标签在垂直和水平方向上都无法正确缩放.似乎是.NET框架中的错误?

编辑:一些提示:字体更改仅应用于包含表单,控件从表单继承其字体.如果可能的话,我想保持这种方式.

使用默认字体(Microsoft Sans Serif 8.25pt),不会发生此问题.AutoScaleMode = Font当然,使用(当然具有足够的AutoScaleDimensions)要么根本不进行缩放,要么完全如上所示进行缩放,具体取决于设置Font的时间(在更改AutoScaleMode之前或之后).问题不是特定于"Tahoma"字体,它也出现在Microsoft Sans Serif,9.25pt.

是的,我已经阅读了这篇文章,发布了 高DPI问题, 但它并没有真正帮助我.

有什么建议如何解决这个问题?

编辑2:关于我的意图的一些额外信息:我有大约50个已经工作的固定大小对话框,有几百个正确放置的固定大小控件.它们从较旧的C++ GUI框架迁移到C#/ Winforms,这就是它们都是固定大小的原因.所有这些都使用9.25pt字体,96 dpi看起来很好.在旧框架下,缩放到120 dpi工作正常 - 所有固定大小的控件在两个维度上缩放相等.上周,我们在切换到120 dpi时在WinForms下检测到这种奇怪的缩放行为.你可以想象我们的大多数对话现在在120 dpi下看起来非常糟糕.我正在寻找一种解决方案,避免完全重新设计所有这些对话框.

编辑3:为了测试这种行为,恕我直言,建立一个120 dpi的虚拟Windows XP环境是一个好主意,而开发环境只有96 dpi(至少,这就是我所做的).在96和120 dpi之间切换通常需要在Win XP下重启,否则你看不到真正发生的事情.

// As requested: the source code of Form1.cs 
namespace DpiChangeTest …
Run Code Online (Sandbox Code Playgroud)

.net c# winforms

35
推荐指数
1
解决办法
9万
查看次数

Windows 10上的Windows窗体应用程序无法正确扩展

在Windows 10上运行我们的一个Windows窗体应用程序时,GUI看起来很糟糕,因为缩放似乎搞砸了.以下是一些1920x1080截图(请注意第二对的不同尺寸): 赢10

赢7

赢10

赢7

Windows 10显示设置中的缩放选项设置为100%(因此不应应用额外的缩放).此外,在程序启动时执行以下代码:

  static void Main()
    {
        if (Environment.OSVersion.Version.Major >= 6) //Windows Vista and higher
            SetProcessDPIAware(); //disable DPI scaling (or something like that) to avoid scaling problems on Windows 10

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(Hauptmenue.Instance);
    }
Run Code Online (Sandbox Code Playgroud)

这个代码块有点帮助,因为它在Windows 10上看起来更糟糕.但这还不够好......有没有人知道如何"恢复"GUI以使其看起来与Windows 7或8完全一样?

user-interface scaling winforms windows-10

5
推荐指数
1
解决办法
7395
查看次数

标签 统计

winforms ×2

.net ×1

c# ×1

scaling ×1

user-interface ×1

windows-10 ×1