БлогNot. Windows Forms, WPF или UWP и Как создать визуальный проект C#

Windows Forms, WPF или UWP и Как создать визуальный проект C#

На самом деле, холивар, плюс я мог не указать какие-то актуальные проблемы или указать уже решённые.

При работе на C# и ряде других языков, входящих в экосистему .NET, в настоящее время есть несколько подходов к написанию "приложений с интерфейсом" (то есть, имеющих форму - окно с интерфейсными компонентами Windows):

1. Windows Forms - классический UI-фреймворк, отрисовка выполняется с помощью библиотек Windows User32 и GDI+.

2. WPF (Windows Presentation Foundation) - современная подсистема для построения графических интерфейсов, основанная на использовании ля создания интерфейсов языка декларативной разметки XAML и отрисовке компонент с помощью DirectX.

3. UWP (Universal Windows Platform) платформа, впервые представленная в Windows 10. Цель - создание универсальных приложений, запускаемых на декстопе и мобильном устройстве без изменений в коде.

Преимущества Windows Forms:

  • WYSIWYG-дизайнер форм;
  • Компонентная архитектура;
  • Поддержка невизуальных компонентов;
  • Поддержка детерминированного уничтожения;
  • Полная интеграция с базовыми библиотеками .NET;
  • Нативные элементы управления идеально вписываются в тему Windows, потому что являются её частью;
  • Экономное потребление системных ресурсов;
  • При грамотном использовании компонентной модели рутинная работа может быть сведена к нулю, и программу с большим количеством однотипных форм можно написать за день.

Недостатки Windows Forms:

  • Привязка данных только к свойствам и только по смене фокуса;
  • При масштабировании экрана в новых Windows может "съехать" раскладка формы, технология была изначально не рассчитана на современные возможности масштабирования;
  • В основе технологии лежат нативные элементы управления Windows, их внешний вид сложно изменить, и типовое приложение выглядит достаточно скромно, и для преодоления этого недостатка требуются сторонние библиотеки наподобие Infragistics или DevExpress;
  • Есть вероятность потери большого количества работы при крахе дизайнера форм. Ошибки нередко возникают при работе со сторонними компонентами.

Преимущества WPF:

  • При ошибке в работе дизайнера ничего фатального произойти не может, потому что внешний вид приложения описывается как xaml (основанный на xml язык разметки для приложений);
  • Можно настроить внешний вид стандартных элементов управления практически как угодно, плюс разработать свои нестандартные элементы управления;
  • Проблемы при масштабировании экрана в новых Windows возникают гораздо реже, чем при использовании Windows Forms;
  • Привязка данных гибко настраивается;
  • Поддержка анимации, звука, 3D графики.

Недостатки WPF:

  • Писать xaml гораздо более трудоёмко, чем пользоваться дизайнером Windows Forms. Кроме того, декларативный код требует большей концентрации внимания и аккуратности при написании, а отлаживать его почти невозможно. В целом, архитектура технологии не располагает к быстрой разработке, сложнее автоматизировать рутину;
  • Непредсказуемое поведение при изменении темы Windows. Теоретически, WPF подстраивается под тему Windows, но на практике её элементы управления могут выглядеть по-разному в зависимости от темы Windows, и всё равно не нативно;
  • Ограниченная интеграция с базовыми библиотеками .NET Framework;
  • Как следствие, отсутствует поддержка невизуальных компонентов и детерминированного уничтожения. Компонентная модель поддерживается лишь выборочно;
  • Неудобная система задания расположения элементов управления через явные номера строк и столбцов в самом распространённом контейнере. При изменении во внешнем виде приложения нужно их исправлять во всех элементах управления;
  • Постоянно что-нибудь масштабируется и в результате размывается - шрифты, растровые картинки. Проблема зависит от монитора, видеокарты и темы Windows;
  • Использование рекомендуемого Microsoft паттерна MVVM (Model-View-ViewModel) приводит к раздуванию объёма исполняемого кода.
  • Отсутствует диалог выбора директории из коробки;
  • Отсутствует поддержка MDI из коробки. Поскольку это базовая функция практически в любом приложении, приходится либо делать самостоятельно, либо искать сторонние решения;
  • Высокое потребление системных ресурсов.

UWP - похожая на WPF технология, к её преимуществам можно отнести:

  • Интеграция с магазинами приложений;
  • Возможность разрабатывать приложение параллельно под разные платформы (Windows, Android);
  • Встроенная поддержка диалогов.

Недостатки UWP:

  • Отсутствует возможность подключения к базе данных;
  • Работает только в новых версиях Windows, начиная с 10.

По впечатлениям разработчиков, WPF быстрее работает на новых компьютерах, а Windows Forms на старых.

Можно сделать вывод, что типовые потребности в разработке стандартных приложений лучше закрывает Windows Forms. WPF имеет смысл использовать для специфических задач, требующих нестандартной векторной графики и не требующих хорошей совместимости программы с разными типами компьютеров. UWP имеет смысл использовать для разработки тонких клиентов популярных сервисов под разные платформы.

Типовой состав проекта Windows Forms: Visual Studio создаёт довольно много файлов, поэтому каждое приложение размещается в новой папке проекта. На рисунке показана типовая структура проекта с одной формой, а ниже в описано назначение основных файлов (пути указаны от открытой папки проекта на рисунке).

Папка проекта C# внутри папки решения
Папка проекта C# внутри папки решения

  • ../ WindowsFormsApp1.sln где WindowsFormsApp1 – имя решения, в данном случае стандартное. Относится к категории группы проектов, объединенных в одно решение. Организует все элементы проекта (проектов) в одно общее решение
  • Form1.cs содержит класс формы, которая по умолчанию запускается при старте приложения
  • Form1.Designer.cs содержит определение компонентов формы, добавленных на форму в графическом дизайнере (графический дизайнер Windows Forms на данный момент официально доступен только в Visual Studio)
  • WindowsFormsApp1.csproj стандартный файл проекта C#, который соответствует назанию проекта (по умолчанию названию каталога) и описывает все его настройки
  • WindowsFormsApp1.csproj.user дополнительный файл проекта C#, который хранит специфичные для текущего пользователя настройки
  • Program.cs определяет класс Program, который запускается при старте приложения и запускает форму Form1
  • Form1.resx хранит ресурсы формы. Как правило, ресурсы используются для создания однообразных форм сразу для нескольких языковых культур
  • app.config позволяет настроить способ, которым общеязыковая среда выполнения будет находить и загружать файлы сборки
  • Properties (вложенная папка) организует хранение параметров для работы приложения
  • ../packages (папка) хранит внешние библиотеки (пакеты), если таковые подключались. Данные об используемых в проекте пакетах в этом случае прописаны в файле packages.config

Обратите внимание, что при архивировании проекта пакеты папки, значки которых на рисунке вычеркнуты, можно предварительно удалить из папки проекта, чтобы уменьшить объём хранимого или пересылаемого архива.

Предполагается, что мы создали проект Windows Forms или Windows Forms App по следующему алгоритму:

1. Запустив Visual Studio, нажмём "Создание проекта", выберем язык и тип проекта, нажмём "Далее":

Создание проекта C#, шаг 1
Создание проекта C#, шаг 1

Заметим, что разница между двумя типами проектов "Приложение Windows Forms" состоит в том, что Windows Forms App использует технологию .net core, а Windows forms app .NET Framework, соответственно, технологию .net framework.

2. При необходимости поменяем имя проекта и решения, укажем целевую папку, включим опцию "Поместить решение и проект в одном каталоге", если проект будет единственным в решении, нажмём "Создать":

Создание проекта C#, шаг 2
Создание проекта C#, шаг 2

При макете окон по умолчанию мы получили следующую картину:

Окно проекта C# по умолчанию
Окно проекта C# по умолчанию

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

Удобный для разработки несложных приложений интерфейс
Удобный для разработки несложных приложений интерфейс

Основные элементы окна Visual Studio:

  • Обозреватель решений позволяет наглядно увидеть структуру приложения и включённые в него или связанные с ним файлы, а также открыть их;
  • Окно Конструктора или Кода, переключение между этими режимами делается первыми пунктами меню Вид (Код, Конструктор) или указанными в этом меню "горячими клавишами"; в режиме Конструктора мы создаём интерфейс приложения и обработчики его событий, в режиме Кода – пишем наполнение созданных функций;
  • Панель элементов, позволяет добавить (перетащить) в окно Конструктора элементы интерфейса приложения;
  • Окно Свойства позволяет изменить свойства объектов, выбранных в конструкторе, а также назначить обработчики для событий этих объектов. Обратите внимание на кнопки сортировки свойств (по категориям или по алфавиту), переключения между отображением свойств и событий, а также на область описания выбранного свойства или события внизу данного окна. Как правило, значения свойств можно вводить с клавиатуры или выбирать из предложенных списков, а для создания обработчика события достаточно выполнить двойной щелчок мышью на нужном событии из списка;
  • В верхнем меню находятся списки выбора конфигурации приложения и кнопка сборки + запуска (с зелёным треугольником).
  • При компиляции, сборке или отладке приложения в нижней части окна приложения появляются дополнительные сведения, а также сообщения об ошибках.

 Этот материал подробнее и с парой примеров приложений, файл "Основы Windows Forms" PDF (704 Кб)

27.01.2023, 11:48 [1096 просмотров]


теги: c# учебное программирование studio

К этой статье пока нет комментариев, Ваш будет первым