2015-11-08 6 views
0

Я разрабатываю приложение Winform, которое должно занимать весь экран, целевое устройство имеет разрешение 1920x1080. Главное окно управления определяется следующим образом:Winform Main Control Too Large

MaximumSize 1920, 1080 
Size 1920, 1080 
MinimumSize 1918, 1078 
StartPosition CenterScreen 

Для того, чтобы заполнить экран я добавил следующее к методу _load:

this.TopMost = true; 
this.FormBorderStyle = FormBorderStyle.None; 
this.WindowState = FormWindowState.Maximized; 
this.Activate(); 

При запуске приложения Окно управления начинается в верхней левый, как и следовало ожидать, но самый правый пятый и нижний 5-й (приблизительно) формы выходят из экрана. Элементы управления, которые должны появляться в отсечных регионах, находятся в соответствующих местах (например, метка в местоположении 1712, 551, которая должна находиться в пределах экрана 1920x1080). Может ли кто-нибудь объяснить? Если бы я знал, почему это происходит, я уверен, что решение будет очевидно.

ответ

1

Возможно, ваша установка Windows фактически масштабирует форму. Это можно сделать с помощью настроек DPI (обрезание 1/5-го звуков, таких как настройка DPI 125%), или Windows 10, когда оно самонастраивается.

Лучшее, что нужно сделать, это не полагаться на правильные измерения экрана. Вместо этого попробуйте использовать столько панелей, которые могут быть автоматизированы, например TableLayoutPanel и другие. Таким образом, вам не нужно будет рассчитывать, вместо этого инфраструктура сделает это за вас.

+0

Более конкретно, в моем ноутбуке lenovo/Windows8 есть параметр в панели управления \ Внешний вид и персонализация \ Дисплей с ползунковой панелью, что позволяет «Изменить размер всех элементов». В случае, если кто-то должен когда-либо знать. –

3

Я добавил следующее к методу _load

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

Но ваш код меняет форму FormBorderStyle, и теперь это местоположение и размер не верны. Поскольку окно больше не имеет границы. Таким образом, окно слишком велико, а часть клиентской области отключена от экрана.

Вы должны переместить назначение FormBorderStyle в конструктор формы, чтобы окно было создано с правильной рамкой. Установка свойства с помощью конструктора проще всего.