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



当我在寻找在 Debian Linux 4.1.x(在 BeagleBone Black 上(上运行基于 GUI 的程序的最快方法时,我偶然发现了这个线程:

2015 年在 Linux 中运行 NET 应用程序

我最熟悉的提供GUI的平台是.NET,所以这似乎是一个完美的情况。 现在,当我在VS2017中将WinForms应用程序放在一起时,即使使用非常新的.NET 4.7.1,在Linux目标上使用mono编译,复制和执行,它确实有效。 如果不是因为这个小剧透,我会很高兴的:

如果我在Visual Studio中将主Windows.Forms.Form的分辨率设置为800x480,这是BeagleBone应该获得的TFT显示器的原始分辨率,首先,我注意到WinForms应用程序表单的屏幕截图仅为784x472而不是800x480(在Windows 10上(,这已经足够有趣了。但它变得更有趣了。

首先,设置: BeagleBone现在有一个全高清(1920x1080(屏幕连接到其HDMI端口,我将分辨率配置为后来的目标800x480,当然,这看起来并不漂亮,但是那里的极简主义GUI确实在系统设置中告诉我它真的是800x480。

现在踢球者: 该程序在Windows(10(中给我的屏幕截图名义上太小,即16x8像素短,实际上在BeagleBone上使用Mono执行时显得太宽了。不仅仅是几个像素太宽,更像是 1/4 太宽。

有人知道为什么吗? ...解决方案也会很好。(好吧,在 VS 中缩小所有内容,直到它适合为止,但这不是一个好的解决方案(。

我知道目前在Mono WinForms支持方面没有做太多工作,但这看起来像一个简单的问题......这使得似乎并非完全不现实,可以修复;)

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

export MONO_MWF_SCALING=disable
mono myapp.exe

如果这修复了它,您可以通过从窗体的设计器代码中删除以下行来在应用程序中禁用它:

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

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

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

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

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

我注释掉了第一个,并将第二个更改为:AutoScaleMode.None; 因此,这导致了一种至少适合屏幕的形式。这次有点太小了。 虽然在设计师中它显示.尺寸为 800x480,这在设计器文件中没有像那样设置。 取而代之的是:

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

有趣。也许Mono的边界或其他什么都不同。如果某个外部分辨率是目标,那么设置客户端大小并不是最明智的做法...? 我将其更改为:

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

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

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

最新更新