Размер шрифта независимый UI: все повредилось, когда я переключился на 120 DPI?

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
11
задан Matt Hamilton 25 September 2008 в 11:18
поделиться

3 ответа

Учитесь, как работа свойств Anchor и Dock над Вашими средствами управления, оставьте что-либо, что может сам AutoSize один, и использовать a TableLayoutPanel когда Вы можете.

Если Вы сделаете эти три вещи, то Вы получите большой опыт проектирования WPF в Windows Forms. Хорошо разработанный TableLayoutPanel приложит все усилия для калибровки средств управления так, чтобы они соответствовали форме правильно. Объединенный со средствами управления AutoSize, прикреплением и AutoScaleMode, упомянутым Soeren Kuklau, необходимо смочь сделать что-то, что масштабируется хорошо. В противном случае Ваша форма могла бы просто иметь слишком много средств управления на нем; рассмотрите разделение его на вкладки, плавающие панели инструментов или некоторое другое пространство.

В WPF это намного легче, потому что понятие автокалибровки средств управления встроено; в большинстве случаев при размещении элемента WPF при помощи координатной пары, Вы делаете его неправильно. Однако, Вы не можете изменить то, что в более низких разрешениях не требуется большого количества текста на 120 точек на дюйм для заполнения экрана. Иногда проблемой не является Ваше расположение, но попытка поместить слишком много в небольшое пространство.

11
ответ дан 3 December 2019 в 06:23
поделиться

Если я должен был придерживаться Windows Forms, что все приемы к достижению независимого от размера шрифта расположения, которое может пережить пользователя, устанавливающего его большие шрифты, или устанавливающего дисплей на 120 DPI?

Для одного AutoScaleMode может быть Вашим другом.

4
ответ дан 3 December 2019 в 06:23
поделиться

В целом проблемой является одно из использования двух различных "констант" для макета формы и затем изменения одной из тех констант, не изменяя другой.

Вы используете пиксели для своих объектов формы и точки (в основном дюймы) для определения размера шрифта. Пиксели и точки связаны DPI, таким образом, Вы изменяете DPI, и внезапно Ваши пиксельные фиксированные значения приводят в порядок не строку с Вашими фиксированными значениями точки.

Существуют пакеты и классы для этого, но в конце дня необходимо выбрать одну единицу или другой, или масштабировать одну из единиц согласно постоянному изменению.

Лично, я изменил бы объекты на форме в дюймы. Я не человек C#, таким образом, я не знаю, поддерживается ли это исходно, или если необходимо выполнить некоторую динамическую калибровку формы на запуске приложения.

Если необходимо сделать это в программном обеспечении, затем идти вперед и обычно измерять все (скажите к обычным 96 DPI).

Когда Ваше приложение запускается, проверьте, что система в 96 DPI перед показом форм. Если это, большое. В противном случае затем установите переменную с поправочным коэффициентом, и масштабируйте и переведите (измените и местоположение и размер) каждого объекта перед показом формы.

Окончательное, тем не менее, должно было бы указать все в дюймах, или точки (точка является 1/72 дюйма), и позвольте ОС иметь дело с ним. Вам, возможно, придется иметь дело с угловыми случаями (наружный экран с правильно установленным DPI покажет Ваше приложение в нескольких пикселях...),

4
ответ дан 3 December 2019 в 06:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: