NetForms

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

NetForms — это Windows Forms для .NET 10 на Windows и Linux. Если вы писали приложение на WinForms, вы уже умеете писать на NetForms: код тот же. Здесь — только то, что отличается: как поставить инструменты и создать проект.

1. Установка

  • .NET 10 SDK — https://dotnet.microsoft.com/download. В Ubuntu 24.04+: sudo apt install dotnet-sdk-10.0.
  • Только Linux: несколько системных библиотек (в настольном дистрибутиве они уже есть).
  • По желанию, для визуального дизайнера: VS Code с расширением NetForms Designer (Marketplace / Open VSX: netforms.netforms-designer) и расширением C#.

Пошагово для Windows и каждого семейства Linux: Установка и настройка.

2. Создание проекта

Из командной строки:

dotnet new install NetForms.Templates::0.1.0-preview.3
dotnet new netforms -n HelloForms
cd HelloForms
dotnet run

Или в VS Code: NetForms: Create New Project… — расширение само поставит шаблоны из NuGet.

Получаются те же три файла, что Visual Studio создаёт для WinForms-приложения, и файл проекта, который отличается от созданного Visual Studio в одном месте — ссылке на NetForms:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net10.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <RootNamespace>HelloForms</RootNamespace>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="NetForms" Version="0.1.0-preview.3" />
  </ItemGroup>

  <ItemGroup>
    <!-- То, что добавляет <UseWindowsForms>true</UseWindowsForms>: пространства имён WinForms как неявные using. -->
    <Using Include="System.Drawing" />
    <Using Include="System.Windows.Forms" />
  </ItemGroup>

</Project>

Program.cs:

namespace HelloForms
{
    internal static class Program
    {
        [STAThread]
        static void Main()
        {
            ApplicationConfiguration.Initialize();
            Application.Run(new MainForm());
        }
    }
}

Формы и пользовательские контролы добавляются командами dotnet new netforms-form -n SettingsForm и dotnet new netforms-usercontrol -n ColorPicker (в папке проекта, после первого dotnet build или dotnet restore; в подпапке передайте пространство имён: --Namespace HelloForms.Views) или командой NetForms: New Form… в VS Code.

3. Код — как в WinForms

Всё из документации Microsoft по WinForms применимо: контролы, события, раскладка через Anchor/Dock, TableLayoutPanel, свои контролы с OnPaint, привязка данных к DataGridView, диалоги. Например, свой контрол:

public class Gauge : Control
{
    private int _value;

    public int Value
    {
        get => _value;
        set { _value = value; Invalidate(); }
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        e.Graphics.FillRectangle(Brushes.SteelBlue, 0, 0, Width * Value / 100, Height);
        TextRenderer.DrawText(e.Graphics, $"{Value}%", Font, ClientRectangle, ForeColor);
    }
}

Прежде чем опираться на что-то редкое, загляните в Совместимость и покрытие API.

4. Проектирование форм

Откройте MainForm.Designer.cs в VS Code с установленным расширением — он откроется холстом. См. Визуальный дизайнер. Файл, который он записывает, — такой же, как у Visual Studio, поэтому тот же проект можно править и в Visual Studio на Windows.

5. Поставка

# на целевой машине нужна среда выполнения .NET 10
dotnet publish -c Release -r linux-x64 --self-contained false

# всё в одной папке, .NET ставить не нужно
dotnet publish -c Release -r linux-x64 --self-contained true
dotnet publish -c Release -r win-x64 --self-contained true

Сборка, сделанная на Windows, запускается на Linux, и наоборот (без -r, с установленной средой .NET): нативные библиотеки SkiaSharp для обеих систем есть в пакете. Подробнее, включая ярлык в меню рабочего стола, — в Установке и настройке.

Исправить страницу на GitHub