为了账号安全,请及时绑定邮箱和手机立即绑定

.NET 与 Mono WinForms - 呈现的实际表单大小

.NET 与 Mono WinForms - 呈现的实际表单大小

C#
蝴蝶刀刀 2021-06-25 09:04:05
我最熟悉的提供 GUI 的平台是 .NET,所以这似乎是一个完美的情况。现在,当我在 VS2017 中组合一个 WinForms 应用程序时,即使使用相当新的 .NET 4.7.1,编译它,在 Linux 目标上使用 mono 复制和执行,它确实有效。如果不是这个小剧透,我会很高兴:如果我将 Visual Studio 中主 Windows.Forms.Form 的分辨率设置为 800x480,这是 BeagleBone 应该获得的 TFT 显示器的原始分辨率,一方面,我注意到该 WinForms 应用程序表单的屏幕截图只是784x472 而不是 800x480(在 Windows 10 上),这已经足够有趣了。但它变得更有趣。首先,设置:BeagleBone 现在有一个 FullHD (1920x1080) 屏幕连接到它的 HDMI 端口,我将分辨率配置为后来的目标 800x480,当然看起来不漂亮,但是那里的极简图形用户界面确实在系统设置中告诉我它真的是 800x480。现在是关键:该程序在 Windows (10) 中给我的屏幕截图名义上太小,即 16x8 像素短,当在 BeagleBone 上使用 Mono 执行时,实际上看起来太宽了。不仅仅是几个像素太宽,更像是 1/4 太宽。有人知道为什么吗?......一个解决方案也很好。(好吧,在 VS 中缩小所有内容直到它适合为止,但这不是一个很好的解决方案)。我知道目前在 Mono WinForms 支持方面没有做太多工作,但这看起来像一个如此简单的问题......这使得修复似乎并非完全不现实;)
查看完整描述

2 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

这可能是由 AutoScaling 引起的。您可以尝试按照此处的说明禁用它:

export MONO_MWF_SCALING=disable
mono myapp.exe

如果这解决了它,您可以通过从表单的设计器代码中删除以下行在您的应用程序中禁用它:

this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);

(这一行是由 Visual Studio 在创建新表单时自动添加的。但是,如果您的表单因此在 Linux 上看起来很糟糕,它们在任何默认字体已更改的 Windows 计算机上也会看起来很糟糕。)


查看完整回答
反对 回复 2021-06-26
?
互换的青春

TA贡献1797条经验 获得超6个赞

首先,感谢“OL.”,他让我走上了正轨。有些事情显然发生了变化,因此是我自己的答复。

因此,导出MONO_MWF_SCALING =disable 对这种情况完全没有影响。但我没有让自己分心,继续调查。我在解决方案范围内的搜索中没有找到AutoScaleBaseSize。但是设计器文件中的内容是:

  this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);  
  this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

我注释掉了第一个,并将第二个更改为:AutoScaleMode.None;所以这导致了一种至少适合屏幕的形式。这次有点太小了。尽管在设计器中显示 .Size 为 800x480,但在设计器文件中并没有这样设置。取而代之的是:

  this.ClientSize = new System.Drawing.Size(784, 441);

有趣的。也许 Mono 的边界或任何不同。如果某个外部分辨率是目标,那么设置 ClientSize 不是最明智的做法......?我把它改成:

  this.Size = new System.Drawing.Size(800, 480);

等等,尺寸是正确的。现在将表单位置设置为 (0,0),一切都如我所愿。嗯,差不多。

原始问题/主要问题得到了回答,因此被接受。对于那些关心的人,我将描述我仍然看到的小问题,作为评论。


查看完整回答
反对 回复 2021-06-26
  • 2 回答
  • 0 关注
  • 217 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信