Я создал приложение winform. Размер каждого экрана составляет 1361, 768 пикселей. Это отлично работало для больших экранов и / или ноутбуков. Но теперь мне нужно перенести свое приложение на планшеты с 10-дюймовым экраном, а это значит, что мое приложение не подходит.

Мне никогда раньше не приходилось сталкиваться с этой проблемой, как можно автоматически настроить размер каждой формы и настроить все элементы управления и панели при просмотре на небольших экранах?

Я использую VS 2012.

7
Jose M. 24 Апр 2014 в 07:26

3 ответа

Лучший ответ

Сделать формы полностью масштабируемыми в WinForms возможно, но это требует некоторой работы. Хорошая новость заключается в том, что большая часть этой работы выполняется во время разработки, правильно упорядочивая элементы управления, чтобы все выполнялось автоматически фреймворком. Это утомительно, но несложно. Радуйтесь, что вам не нужно писать код масштабирования вручную, форма за формой, как вы это делали с VB 6.

Вам нужно будет познакомиться с четырьмя фундаментальными свойствами:

Последние двое должны быть хорошо знакомыми веб-разработчиками, знающими CSS - здесь они делают то же самое. Padding контролирует внутреннее поле вокруг элемента управления, а margin контролирует внешнее поле. Вам нужно будет установить их правильно, чтобы ваши элементы управления могли «дышать», потому что код автоматического масштабирования просто будет прижимать их друг к другу.

«Стандартные» поля вокруг элемента управления в настольном приложении Windows составляют примерно 12–15 пикселей. Убедитесь, что вы оставили хотя бы столько места. Затем добавьте дополнительные поля / отступы по своему усмотрению для разделения элементов. Я сохраняю эти спецификации макета в закладках для справки. Это еще одна хорошая ссылка.

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

Хороший способ сделать это - использовать два предоставленных невидимых помощника по макету, FlowLayoutPanel и TableLayoutPanel. Лично я не нахожу первое очень полезным очень часто, по крайней мере, для стандартных приложений Windows. Но TableLayoutPanel бесценен.

Обычно я заполняю всю форму TableLayoutPanel (поля = 0, док = заливка). Затем я добавлю отдельные элементы управления (или иногда еще один вложенный TableLayoutPanel) в его ячейки. У этих дочерних элементов управления будут установлены соответствующие поля и будут установлены свойства Anchor или Dock, в зависимости от того, хочу ли я, чтобы этот элемент управления имел фиксированный размер или динамически изменял размер.

Прежде чем вы узнаете, как эти свойства взаимодействуют и как все это работает, вам, вероятно, придется немного поэкспериментировать с макетом. Сделайте резервную копию ваших форм, а затем просто копайтесь. Или вам может быть проще начать проектировать каждую форму с нуля (вы все равно можете копировать и вставлять отдельные элементы управления, чтобы сохранить их другие свойства). В конце концов, все это начнет обретать для вас смысл, и вы сразу же встанете на ноги.

Самое замечательное, что после того, как все это настроено, все, что вам нужно сделать, это убедиться, что размер вашей формы можно изменять. Затем, независимо от того, изменяет ли пользователь его размер вручную или использует кнопку развертывания / восстановления, он автоматически заполняет размер экрана. Это также хорошо работает для всех настроек DPI, что является еще одной распространенной ахиллесовой пятой разработчиков WinForms.

10
Cody Gray 24 Апр 2014 в 03:56

Попробуйте получить переменные разрешения для настройки ваших экранов, есть ответ, чтобы получить эти переменные с помощью класса Screen

Получение разрешения экрана

1
Community 23 Май 2017 в 11:51

DevExpress имеет отличный контрольный вызов Layout Control. Этот элемент управления помогает поддерживать согласованные пробелы между элементами управления при изменении размера формы. Для эффективного использования элемента управления требуется небольшое исследование, но как только вы поймете, как использовать этот элемент управления, результаты будут согласованными, и вы сможете ускорить разработку формы.

1
user3994976 31 Авг 2014 в 15:58