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.5" />

То же приложение, на 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.5 · измерено, а не на глаз

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

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

761 / 1254типов WinForms и System.Drawing с полным API; ещё 141 — частично
641 / 641тестов проходят; раскладка, порядок событий и метрики текста сверяются с настоящим WinForms
7 / 7рабочих приложений на .NET Framework 4.8 переводятся и собираются без ручных правок
31 / 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, диалоги печати, параметров страницы и предпросмотра; CUPS в Linux, winspool в Windows, PDF
ПеретаскиваниеDoDragDrop, DragEnter/Over/Drop, файлы и текст из других приложений
Дизайнерсвои контролы и библиотеки контролов из NuGet на панели элементов, живые на холсте
Пока нет
Доступностьтолько модель AccessibleObject есть; экранные дикторы контролы пока не видят
Перетаскивание наружучастично из других приложений принимается; вытащить из приложения пока нельзя
WebBrowserнет контрол Internet Explorer; WebView2 — только Windows
Тёмная тема, 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.5
dotnet new netforms -n MyApp
cd MyApp
dotnet run

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

# сначала отчёт, потом --apply
dotnet tool install -g NetForms.Convert
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.