.NET vs. Mono WinForms - фактический размер формы в том виде, в каком он был представлен - PullRequest
0 голосов
/ 22 мая 2018

Когда я искал самый быстрый способ получить программу с графическим интерфейсом, работающую на Debian Linux 4.1.x (на BeagleBone Black), я наткнулся на этот поток:

, запускающее приложение NETв Linux в 2015 году

Платформа с графическим интерфейсом, с которым я больше всего знаком, - это .NET, так что это казалось идеальной ситуацией.Теперь, когда я собрал приложение WinForms в VS2017, даже с довольно новым .NET 4.7.1, скомпилировал его, скопировал и выполнил с моно на цели Linux, оно действительно работает.Я был бы рад, если бы не этот маленький спойлер:

Если бы я установил разрешение моего основного Windows.Forms.Form в Visual Studio на 800x480, которое является собственным разрешением TFT-дисплеяBeagleBone должен получить, с одной стороны, я заметил, что скриншоты формы этого приложения WinForms имеют размер только 784x472 вместо 800x480 (в Windows 10), что уже достаточно забавно.Но это становится смешнее.

Во-первых, установка: у BeagleBone прямо сейчас есть экран FullHD (1920x1080), подключенный к его порту HDMI, и я настроил разрешение на более позднюю цель 800x480, которая не выглядитдовольно, конечно, но минималистский графический интерфейс там говорит мне, что в настройках системы это действительно 800x480.

Теперь кикер: эта программа, которая дает мне номинально слишком маленькие скриншоты в Windows (10), т.е. 16x8короткие пиксели, фактически отображаются как слишком широкие при выполнении с Mono на BeagleBone.И не только несколько пикселей слишком широких, более 1/4 слишком широких.

Кто-нибудь знает почему?... и решение было бы также хорошо.(Что ж, сделайте все меньше в VS, пока он не уместится, но это не очень хорошее решение).

Я знаю, что в настоящее время не так много работы по поддержке Mono WinForms, но это выглядит как простая проблема.... это заставляет задуматься о том, что исправление может быть нереальным;)

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Прежде всего, спасибо "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);

Забавно.Может быть, границы Моно или что-то другое.Если целью является определенное внешнее разрешение, это не самая разумная вещь, чтобы сделать ClientSize ...?Я изменил это на:

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

Et вуаля, размер был правильный.Теперь установите форму Location на (0,0), и все будет так, как я хотел.Ну, почти.

На исходный вопрос / серьезную проблему дан ответ, отсюда и принятие.Для тех, кому все равно, я опишу мелкие проблемы, которые я все еще вижу, в качестве комментариев.

0 голосов
/ 22 мая 2018

Это может быть вызвано автоматическим масштабированием.Вы можете попробовать отключить его, как указано здесь :

export MONO_MWF_SCALING=disable
mono myapp.exe

Если это исправит это, вы можете отключить его в своем приложении, удалив следующую строку из кода дизайнера вашей формы:

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

(Эта строка автоматически добавляется Visual Studio при создании новой формы. Однако, если ваши формы выглядят плохо в Linux из-за этого, они также будут выглядеть плохо на любом компьютере Windows, где по умолчаниюшрифт был изменен.)

...