Введение
Библиотека программного обеспечения графического пользовательского интерфейса Windows Forms (WinForms) — это бесплатная библиотека графических классов (GUI) с открытым исходным кодом, входящая в состав Microsoft .NET, .NET Framework или Mono, предоставляющая платформу для разработки клиентских приложений для настольных компьютеров, ноутбуков и планшетных ПК. Хотя её рассматривают как замену более ранней и сложной библиотеки классов Microsoft Foundation, основанной на C++, она не предлагает аналогичную парадигму и служит лишь платформой для уровня пользовательского интерфейса в многоуровневом решении. 4 декабря 2018 года на мероприятии Microsoft Connect компания Microsoft объявила о публикации Windows Forms как проекта с открытым исходным кодом на GitHub под лицензией MIT. Благодаря этому Windows Forms стала доступна для проектов, ориентированных на .NET Core. Однако, фреймворк по-прежнему доступен только на платформе Windows, а неполная реализация Windows Forms в Mono остаётся единственной кроссплатформенной реализацией.
Windows Forms (WinForms) is a free and open source graphical (GUI) class library included as a part of Microsoft NET, NET Framework or Mono, providing a platform to write client applications for desktop, laptop, and tablet PCs. While it is seen as a replacement for the earlier and more complex C++ based Microsoft Foundation Class Library, it does not offer a comparable paradigm and only acts as a platform for the user interface tier in a multi tier solution. At the Microsoft Connect event on December 4, 2018, Microsoft announced releasing Windows Forms as an open source project on GitHub. It is released under the MIT License. With this release, Windows Forms has become available for projects targeting the NET Core framework. However, the framework is still available only on the Windows platform, and Mono's incomplete implementation of Windows Forms remains the only cross platform implementation.
Архитектура
Приложение Windows Forms — это приложение, управляемое событиями, поддерживаемое платформой Microsoft .NET Framework. В отличие от пакетной программы, оно большую часть времени проводит в ожидании действий пользователя, таких как ввод текста в поле или нажатие кнопки. Код приложения может быть написан на любом языке программирования .NET, например, на C# или Visual Basic. Windows Forms обеспечивает доступ к стандартным элементам управления пользовательского интерфейса Windows, оборачивая существующий API Windows в управляемый код. Благодаря Windows Forms платформа .NET Framework предоставляет более полную абстракцию над Win32 API, чем Visual Basic или MFC. Windows Forms аналогична библиотеке Microsoft Foundation Class (MFC) при разработке клиентских приложений. Она предоставляет обертку, состоящую из набора классов C++ для разработки приложений Windows. Однако, в отличие от MFC, она не предоставляет встроенной структуры приложения. Каждый элемент управления в приложении Windows Forms является конкретным экземпляром класса.
Особенности
Все визуальные элементы в библиотеке классов Windows Forms наследуются от класса Control. Это обеспечивает минимальную функциональность элемента пользовательского интерфейса, такую как положение, размер, цвет, шрифт, текст, а также общие события, такие как щелчок и перетаскивание. Класс Control также поддерживает привязку, позволяющую элементу управления изменять свое положение относительно родительского элемента. Поддержка Microsoft Active Accessibility в классе Control также помогает пользователям с ограниченными возможностями более эффективно использовать Windows Forms. В Visual Studio формы создаются с помощью перетаскивания. Инструмент позволяет размещать элементы управления (например, текстовые поля, кнопки и т. д.) на форме (окне). Элементы управления имеют атрибуты и связанные с ними обработчики событий. При создании элемента управления предоставляются значения по умолчанию, которые могут быть изменены программистом. Многие значения атрибутов могут быть изменены во время выполнения на основе действий пользователя или изменений в среде, что обеспечивает динамическое поведение приложения. Например, код может быть добавлен в обработчик события изменения размера формы, чтобы переместить элемент управления так, чтобы он оставался центрированным, расширялся для заполнения формы и т. п. Вставляя код в обработчик события нажатия клавиши в текстовом поле, программа может автоматически изменять регистр вводимого текста или даже предотвращать ввод определенных символов. Помимо обеспечения доступа к нативным элементам управления Windows, таким как кнопка, текстовое поле, флажок и список, Windows Forms добавила собственные элементы управления для размещения ActiveX, организации макета, проверки и привязки данных. Эти элементы управления отрисовываются с использованием GDI+. Некоторые методы позволяют получить прямой доступ к функциям обратного вызова Win32, которые недоступны на платформах, отличных от Windows. С выпуском .NET Framework 3.0 Microsoft представила второй, параллельный API для отрисовки графических интерфейсов: Windows Presentation Foundation (WPF), основанный на DirectX, вместе с декларативным языком описания графического интерфейса XAML. Во время сессии вопросов и ответов на конференции Build 2014 Microsoft сообщила, что Windows Forms находится в режиме обслуживания, новые функции не добавляются, но обнаруженные ошибки будут исправляться. В последних обновлениях .NET Framework версии 4.5 была реализована улучшенная поддержка высокого DPI для различных элементов управления Windows Forms.
Обратная совместимость XAML с Windows Forms
Для дальнейшей разработки Microsoft заменила Windows Forms графическим интерфейсом на основе XAML, используя такие фреймворки, как WPF и UWP. Однако возможность перетаскивания элементов графического интерфейса, аналогичная Windows Forms, в XAML сохранена путем замены корневого XAML-элемента страницы/окна элементом управления "Canvas". При этом пользователь может создавать окна подобно Windows Forms, непосредственно перетаскивая компоненты в графическом интерфейсе Visual Studio. Хотя XAML обеспечивает обратную совместимость с перетаскиванием через элемент управления Canvas, элементы управления XAML лишь похожи на элементы управления Windows Forms и не являются полностью совместимыми. Они выполняют аналогичные функции и имеют схожий внешний вид, но их свойства и методы достаточно отличаются, что требует преобразования при переходе от одного API к другому.
Альтернативное осуществление
Mono — проект, возглавляемый Xamarin (ранее Ximian, затем Novell), для создания набора инструментов, совместимых с .NET Framework и соответствующих стандарту Ecma. В 2011 году было объявлено о завершении поддержки System.Windows.Forms на уровне .NET 2.0; System.Windows.Forms 2.0 работает непосредственно на Mac OS X. Однако, System.Windows.Forms не активно разрабатывалась в Mono. Достичь полной совместимости с .NET оказалось невозможно, поскольку Microsoft System.Windows Forms является, в основном, оберткой над API Windows, а некоторые из её методов предоставляют прямой доступ к Win32-функциям обратного вызова, которые недоступны на платформах, отличных от Windows. Mono был обновлен таким образом, что по умолчанию предполагает 64-битную платформу. Тем не менее, System.Windows.Forms в Mono для платформы Macintosh OS X была реализована с использованием 32-битной подсистемы Carbon. На сегодняшний день 64-битная версия System.Windows.Forms для использования на Mac OS X остается недоступной, и только .NET-приложения, скомпилированные для 32-битной платформы, могут быть запущены.
System. Windows. Forms 2.0 works natively on Mac OS X. However, System. Windows. Forms has not been actively developed on Mono. Full compatibility with NET was not possible, because Microsoft's System. Windows Forms is mainly a wrapper around the Windows API, and some of the methods allow direct access to Win32 callbacks, which are not available in platforms other than Windows. Mono has been upgraded so that its default is to assume a 64 bit platform. However, System. Windows. Forms on Mono for the Macintosh OS X platform has been built using a 32 bit subsystem, Carbon. As of this date, a 64 bit version of System. Windows. Forms for use on Mac OS X remains unavailable and only NET applications built for the 32 bit platform can be expected to execute.