NetForms
System.Windows.Forms · .NET 10 · Windows + Linux

WinForms только для Windows везде.

NetForms — это Windows Forms для .NET 10, одинаково работающий на Windows и Linux. Те же пространства имён, тот же Application.Run(new MainForm()), тот же InitializeComponent(). Меняется файл проекта, а не код.

Склад
ПозицияКол-воМесто
Провод ПВ1 2,5 мм²1 200 мA-3
Автомат 16 А84B-1
Лоток 60×5036A-1
Что происходит сейчас

WinForms-проект на Linux падает дважды. Потом вы правите один файл.

Собрать
$ dotnet build
error NETSDK1100: To build a project
targeting Windows on this operating
system, set the EnableWindowsTargeting
property to true.
Заставить
$ dotnet run -p:EnableWindowsTargeting=true
You must install or update .NET
to run this application.
Framework: 'Microsoft.WindowsDesktop.App'
No frameworks were found.
Поправить файл проекта
-  <TargetFramework>net8.0-windows</…>
-  <UseWindowsForms>true</…>
+  <TargetFramework>net10.0</…>
+  <PackageReference Include="NetForms"
+     Version="0.1.0-preview.3" />

То же приложение, на Linux

Проект ровно в том виде, в каком его создаёт Visual Studio, после netforms-convert --apply: собран из пакетов NuGet и запущен под X11. Ни одна строка C# не менялась. netforms-convert переводит и проекты .NET Framework 4.x и заранее говорит, что не перенесётся, — с файлом и строкой.

Окно HelloForms с надписью и кнопкой Click me на Linux
HelloForms, Ubuntu 24.04, .NET 10
Рисует NetForms, проектируется в VS Code

Ваши контролы, ваш дизайнер.

Каждый контрол NetForms рисует сам через SkiaSharp, поэтому форма выглядит одинаково на обеих системах. Avalonia 12 делает только то, что делал Win32: окна, ввод, IME, буфер обмена, системные диалоги файлов, DPI. Расширение VS Code открывает любой *.Designer.cs как холст и записывает его так же, как Visual Studio.

Дизайнер NetForms в VS Code на русском: панель элементов, холст формы и свойства
NetForms Designer: панель элементов, лоток компонентов, свойства и события, линии привязки. Работает без сети, интерфейс на русском.
Витрина контролов: вкладки, группа, флажки, переключатели, поля ввода, списки, счётчик, ползунок, индикатор
Витрина контролов. Эталонное изображение теста совпадает по пикселям на Windows и Linux.
Превью 0.1 · измерено, а не на глаз

Насколько это WinForms?

Каждое число — результат теста в CI: API сверяется с эталонными сборками настоящего WinForms, поведение сравнивается с ним на Windows, реальные проекты переводятся и собираются.

664 / 1254типов WinForms и System.Drawing с полным API; ещё 163 — частично
415 / 415тестов проходят; раскладка, порядок событий и метрики текста сверяются с настоящим WinForms
7 / 7рабочих приложений на .NET Framework 4.8 переводятся и собираются без ручных правок
28 / 45открытых WinForms-проектов переводятся и собираются без ручных правок
Работает
РаскладкаAnchor, Dock, TableLayoutPanel, FlowLayoutPanel, AutoSize, AutoScroll
КонтролыОт Button до DataGridView: текст, списки, деревья, ListView (все виды), RichTextBox, выбор дат, MDI
ДанныеBindingSource, DataSet и DataTable, master-detail, правка в DataGridView с её событиями
МенюMenuStrip, ToolStrip, StatusStrip, ContextMenuStrip, NotifyIcon
РисованиеSystem.Drawing на Skia, метрики TextRenderer, свой OnPaint
Ресурсыкартинки и значки в .resx, Properties.Settings, app.config
Пока нет
Печатьнет PrintDocument, PrintPreviewDialog
Доступностьнет экранные дикторы не видят контролы
Drag and dropобъявлено события компилируются, перетаскивания нет
Тёмная тема, DPIчастично одна светлая тема; масштабируется, но DeviceDpi = 96
Win32так задумано Handle равен нулю, WndProc не вызывается

Полное руководство по совместимости · Покрытие API по типам

.NET 10 SDK · Windows 10+ или Linux x64/arm64

Начать

Документация по API — от Microsoft: всё, что написано на learn.microsoft.com/ru-ru/dotnet/desktop/winforms, относится и к NetForms.

Новое приложение

# шаблоны проекта и форм
dotnet new install NetForms.Templates::0.1.0-preview.3
dotnet new netforms -n MyApp
cd MyApp
dotnet run

Готовое WinForms-приложение

# сначала отчёт, потом --apply
dotnet tool install -g NetForms.Convert --prerelease
netforms-convert MyApp.csproj
netforms-convert MyApp.csproj --apply
dotnet run

Пошагово для Windows, Ubuntu, Debian, Fedora, Astra Linux, РЕД ОС и ALT, VS Code и закрытых сетей: Установка и настройка.

Визуальный дизайнер: установите NetForms Designer из VS Code Marketplace или Open VSX (netforms.netforms-designer) и откройте любой *.Designer.cs.