Windows Forms (WinForms)
Windows Forms (WinForms)
Где применяют WinForms
Windows Forms — платформа пользовательского интерфейса для создания классических настольных приложений Windows на .NET. Это один из самых продуктивных способов собрать десктоп с визуальным конструктором в Visual Studio: контролы перетаскиваются на форму, свойства редактируются в окне Properties, а логика пишется в обработчиках событий.
Официальная документация: Windows Forms для .NET. Платформа Windows в целом (WinUI, SDK, Store): Разработка приложений для Windows. Сравнение с WPF, MAUI и другими стеками: Особенности разработки десктопных приложений. Подробнее о WinForms в экосистеме .NET: Платформа .NET — UI-фреймворки.
WinForms - формы, контролы и конструктор в Visual Studio
- WinForms — технология UI для .NET: набор управляемых библиотек для типовых задач (файлы, сеть, диалоги) и построения интеллектуальных клиентских приложений Windows.
- Платформа поддерживает элементы управления, графику (
System.Drawing), привязку данных и ввод пользователя (клавиатура, мышь, перетаскивание). - Приложения могут работать автономно и в сети, обращаться к локальному оборудованию и файловой системе в рамках прав ОС.
- Характерная черта — конструктор форм в Visual Studio с drag-and-drop, сеткой и линиями привязки для выравнивания контролов.
WinForms появился в .NET Framework 1.0 (2002); с .NET Core 3.0 и далее платформа перенесена в современный .NET (сейчас актуальны ветки вроде .NET 8/9/10). Подходит для внутренних утилит, сопровождения legacy, быстрых CRUD-интерфейсов и систем, где важны простота и интеграция с Windows, а не «богатый» кастомный UI.
Две реализации
Microsoft различает две линии WinForms (обзор):
| Реализация | Среда | Примечание |
|---|---|---|
| WinForms для .NET | net8.0-windows, net9.0-windows и новее | Открытый исходный код на GitHub — dotnet/winforms; развивается вместе с релизами .NET |
| WinForms .NET Framework 4.x | net48 и ниже | Входит в Windows как компонент .NET Framework; поддержка в Visual Studio 2017–2022 |
Для новых проектов выбирают SDK-шаблон Windows Forms и целевой фреймворк net*-windows. Миграция с .NET Framework описана в руководстве по переходу.
Модель приложения — форма, контролы, события
Форма
В WinForms форма (System.Windows.Forms.Form) — визуальная поверхность окна или диалога: заголовок, границы, кнопки свернуть/развернуть, область для контролов. Класс Form позволяет создавать обычные, модальные, MDI-окна и настраивать FormBorderStyle, StartPosition, Size, Text и др. (документация Form).
Типичное приложение:
- Создаётся одна или несколько форм.
- На форму добавляются элементы управления (
Controlи наследники). - На действия пользователя подписываются обработчики событий (клик, ввод текста, закрытие формы).
Подробнее: События в Windows Forms.
Контролы
Стандартные контролы: Button, TextBox, Label, ComboBox, CheckBox, RadioButton, ListBox, TreeView, TabControl, встроенный WebBrowser / современные варианты через WebView2 и др. Полный список: элементы управления для Windows Forms.
Для сложного UI без сторонних библиотек используют:
FlowLayoutPanel,TableLayoutPanel,SplitContainer— быстрые макеты;ToolStrip,MenuStrip,StatusStrip— панели и меню в стиле Office;UserControl— собственные составные контролы.
Отрисовка «вручную» — через System.Drawing (линии, фигуры, owner-draw).
Событийная модель
Любое действие пользователя с формой или контролом порождает событие; приложение реагирует кодом в момент возникновения. Это та же идея, что перенесли в ASP.NET Web Forms (PostBack, ViewState) — см. C# — Web Forms.
Control.Invoke / BeginInvoke. См. раздел о многопоточности в 112.md.Разработка в Visual Studio
Рекомендуемый путь — создание приложения WinForms в Visual Studio:
- Шаблон «Приложение Windows Forms» (.NET).
- Конструктор форм — перетаскивание с Toolbox, свойства в Properties, автогенерация
*.Designer.csиInitializeComponent(). - Окно «Источники данных» — drag-and-drop привязки к БД, XML, JSON, веб-сервисам.
Минимальная структура точки входа (.NET 6+):
namespace MyWinFormsApp;
static class Program
{
[STAThread]
static void Main()
{
ApplicationConfiguration.Initialize();
Application.Run(new Form1());
}
}
Файл проекта обычно использует SDK Microsoft.NET.Sdk с UseWindowsForms:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
Скачать среду: Visual Studio 2022 с рабочей нагрузкой «Разработка классических приложений .NET».
Карта документации Microsoft Learn
Ниже — структура главной страницы WinForms в сжатом виде (удобно как оглавление для углубления).
Сведения и старт
| Тема | Ссылка |
|---|---|
| Обзор | overview |
| Что нового (.NET 10 и др.) | whats-new |
| Создание приложения | create-app-visual-studio |
| Миграция с .NET Framework | migration |
Элементы управления
| Тема | Ссылка |
|---|---|
| Обзор контролов | controls overview |
| Список контролов | controls-to-use |
| Добавление контрола | add control |
| Горячие клавиши (access keys) | access keys |
Ввод — клавиатура и мышь
| Тема | Ссылка |
|---|---|
| Клавиатура | input-keyboard |
| События клавиатуры | keyboard events |
| Мышь | input-mouse |
| Перетаскивание (drag-and-drop) | drag-and-drop |
Привязка данных и параметры
| Тема | Ссылка |
|---|---|
DataGridView | data grid |
BindingSource, BindingNavigator | data binding |
| Параметры приложения | application settings |
Развёртывание и сопровождение
| Тема | Ссылка |
|---|---|
| Развёртывание | deployment |
| Обновления ClickOnce / MSIX | см. разделы deployment на Learn |
| Устранение неполадок | troubleshooting |
Архитектура и ограничения
- Каждый стандартный контрол — обёртка над HWND (User32): нативный вид, высокая совместимость с Windows, но внешний вид зависит от темы ОС.
- Графика «из коробки» — GDI+, не DirectX: сложные эффекты (анимации, векторный UI) проще в WPF или MAUI.
- Контролы не маршалируются между доменами приложений (
AppDomain); multi-AppDomain-сценарии с передачей контролов через границы не поддерживаются. - Официальная платформа — Windows; кроссплатформенность ограничена (Mono и аналоги — не целевой путь Microsoft).
Паттерны: код «в форме», MVP (удобно тестировать UI-логику), реже MVVM. См. архитектурные паттерны в этом же разделе.
Актуальное развитие (.NET 10+)
Платформа не заморожена: в новых возможностях WinForms для .NET 10 среди прочего:
- унификация API буфера обмена с WPF;
- улучшения асинхронных форм и отзывчивости UI при нескольких окнах.
Сообщество дополняет экосистему через Windows Forms Community Toolkit.
Когда выбирать WinForms
| Выбирайте WinForms | Рассмотрите WPF / MAUI / Electron |
|---|---|
| Быстрый UI под Windows, знакомая событийная модель | Богатый кастомный дизайн, анимации, MVVM |
| Сопровождение существующего .NET Framework-приложения | Кроссплатформа macOS/Linux |
| Внутренние утилиты, админки, линейные формы | UI на HTML/CSS (команда веб-разработчиков) |
Частые ошибки
| Симптом | Причина |
|---|---|
| «Зависание» формы | Долгая работа в обработчике Click |
Cross-thread operation not valid | Обновление контрола не из UI-потока — Invoke |
| Дизайнер не открывается | Ошибка в InitializeComponent / partial class |
| DPI размытие | Нет AutoScaleMode / PerMonitorV2 в манифесте |
Что попробовать
async voidобработчик +await Task.Runдля тяжёлой работы.BindingSource+DataGridView— мини-CRUD без ручного refresh.- Встроить WebView2 на форму для гибридного UI.
Частые ошибки
| Симптом | Причина |
|---|---|
| «Зависание» формы | Долгая работа в обработчике Click |
Cross-thread operation not valid | Обновление контрола не из UI-потока — Invoke |
| Дизайнер не открывается | Ошибка в InitializeComponent / partial class |
| DPI размытие | Нет AutoScaleMode / PerMonitorV2 в манифесте |
Что попробовать
async voidобработчик +await Task.Runдля тяжёлой работы.BindingSource+DataGridView— мини-CRUD без ручного refresh.- Встроить WebView2 на форму для гибридного UI.
См. также
- Особенности разработки десктопных приложений — многопоточность, тестирование, упаковка
- WebView — встраивание веб-контента (
WebView2.WinForms) - Electron — альтернативный кроссплатформенный стек на Chromium
- C# — язык для большинства WinForms-проектов
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Настоятельно рекомендую ознакомиться со главой, посвящённой созданию десктопных приложений на Python - 5.02. Графика и игры. Десктопное приложение — это композитная сущность, объединяющая код, ресурсы, метаданные, конфигурации и, зачастую, механизмы обновления, диагностики и интеграции с другими компонентами системы. Многопоточность, реактивность, ресурсы, отладка и прочее. WebView - встроенный браузер в приложениях. Electron — десктопные приложения на HTML, CSS и JavaScript с процессами main, preload и renderer. Платформа разработчика Windows — Windows SDK, Windows App SDK, WinUI 3, WPF, среда разработки, поддержка и обзор драйверов по документации Microsoft. Учётная запись разработчика, MSIX, Partner Center, сертификация и распространение приложений для Windows через Microsoft Store. Десктопное окно — Electron, Vite, React и безопасный IPC через preload; пошаговый разбор для новичков. Работа с графовыми структурами в коде - визуализация состояний узлов и отладка обходов графа на практике. Краткие итоги раздела «Десктопные приложения». Итоги раздела Десктопные приложения — вопросы для самопроверки в энциклопедии Вселенная IT.Архитектура десктопных приложений
Разработка приложений для настольных операционных систем
Особенности разработки десктопных приложений
WebView
Electron
Разработка приложений для Windows (Microsoft Learn)
Microsoft Store и публикация Windows-приложений
Первая программа Electron с React
Работа с графовыми структурами в коде
Итоги
Чек-лист самопроверки