← accueil

Bien démarrer

Créez votre première application Majorsilence.Forms en quelques minutes.

Cette page est une traduction. En cas de divergence, la version anglaise fait foi. English

À partir d’un modèle

La façon la plus simple de démarrer une application Majorsilence.Forms est le modèle dotnet, publié sur NuGet sous le nom Majorsilence.Forms.Templates.

dotnet new install Majorsilence.Forms.Templates
dotnet new majorsilenceforms
dotnet run --project MajorsilenceFormsApp

Cela génère une solution avec deux projets et lance un MainForm « Hello World » basique :

dotnet new majorsilenceforms -n MyApp (éventuellement -o <dir>) génère le projet et l’espace de noms sous le nom indiqué.

Têtes mobile et navigateur

Ajoutez des projets de tête pour les autres cibles d’Avalonia à l’aide d’options — chacune est une tête légère au-dessus de la même bibliothèque d’interface partagée :

dotnet new majorsilenceforms --IncludeAndroid --IncludeWasm --IncludeiOS
Option Ajoute Nécessite
--IncludeAndroid MajorsilenceFormsApp.Android (net10.0-android) dotnet workload install android
--IncludeWasm MajorsilenceFormsApp.Wasm (net10.0-browser) dotnet workload install wasm-tools (pour publish)
--IncludeiOS MajorsilenceFormsApp.iOS (net10.0-ios) un Mac avec dotnet workload install ios

Toutes sont désactivées par défaut, si bien qu’un simple dotnet new majorsilenceforms suivi de dotnet build fonctionne sans workload supplémentaire. La tête iOS est expérimentale. --msformsVersion et --avaloniaVersion remplacent les versions de paquets que le modèle fige ; voir le README du modèle.

Il n’existe pas encore de documentation d’API autonome, mais la surface devrait être familière à quiconque a de l’expérience avec Windows Forms. La meilleure référence est le code source des applications d’exemple :

Voir Exemples pour la liste complète et la façon de lancer chacun.

À partir de zéro

Pour transformer une application console .NET ordinaire en application Majorsilence.Forms, apportez les modifications suivantes.

Fichier projet

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

Ajoutez une référence à Majorsilence.Forms et à un backend — le paquet de base ne référence aucun toolkit de fenêtrage, c’est donc le backend qui met réellement une fenêtre à l’écran :

<ItemGroup>
    <PackageReference Include="Majorsilence.Forms" Version="26.9.0" />
    <PackageReference Include="Majorsilence.Forms.Avalonia" Version="26.9.0" />
</ItemGroup>

Le paquet de base cible à la fois net8.0, net10.0 et netstandard2.0. Aucun suffixe -windows n’est nécessaire pour un backend multiplateforme.

Un formulaire vide

using Majorsilence.Forms;

public class MainForm : Form
{
}

Program.cs

Appelez Application.Run() avec une instance de votre formulaire :

static void Main (string [] args)
{
    Application.Run (new MainForm ());
}

Votre application est maintenant prête à s’exécuter — sur le backend Avalonia par défaut, cela veut dire Windows, macOS et Linux sans autre configuration.

Sélectionner un autre backend

Avalonia est le backend par défaut : quand rien ne définit Platform.Backend, le framework charge Majorsilence.Forms.Avalonia s’il est référencé. Pour exécuter le même formulaire sur un autre hôte, référencez plutôt le paquet de ce backend et sélectionnez-le avant Application.Run :

// GTK 4 — une vraie Gtk.Window, Linux d'abord (nécessite le runtime GTK 4, p. ex. libgtk-4-1)
Majorsilence.Forms.Gtk4.Gtk4Application.Use ();
Application.Run (new MainForm ());

// Terminal — le formulaire remplit le terminal ; graphiques Kitty, Sixel ou blocs Unicode
Majorsilence.Forms.Terminal.TerminalApplication.Use ();
Application.Run (new MainForm ());

// Headless — rendu hors écran pour les tests et la CI
Majorsilence.Forms.Backends.Platform.Backend = new Majorsilence.Forms.Headless.HeadlessPlatformBackend ();

Sous Windows, deux backends supplémentaires existent pour la migration plutôt que pour les nouvelles applications : Majorsilence.Forms.WinForms et Majorsilence.Forms.Wpf hébergent des contrôles Majorsilence.Forms dans une application WinForms ou WPF existante (myControl.ToWinFormsControl(), myControl.ToWpfElement()), y compris sur .NET Framework 4.8, pour que vous puissiez porter un contrôle à la fois et passer à Avalonia ou Uno une fois le dernier morceau terminé. Uno Platform s’exécute à travers sa propre tête d’application. Voir Backends de plateforme pour les sept backends, ce que chacun peut et ne peut pas faire, et comment ajouter le vôtre.

Les contrôles à dessin personnalisé dessinent en unités logiques

Les redéfinitions OnPaint et OnPaintBackground d’un contrôle, ainsi que ses gestionnaires Paint, dessinent en unités logiques — les mêmes unités que tout le reste du framework : Left, Top, Width, Height, ClientRectangle, ClientSize et MouseEventArgs.X/Y. Le framework met le canevas à l’échelle de l’affichage, de sorte que du code de dessin WinForms ordinaire a la bonne taille sur un bureau HiDPI ou sur n’importe quel téléphone (Android rapporte un Scaling d’environ 2,6 à 2,75) sans aucune modification :

protected override void OnPaint (PaintEventArgs e)
{
    base.OnPaint (e);

    e.Graphics.DrawRectangle (Pens.Gray, 0, 0, Width - 1, Height - 1);   // encadre le contrôle
    e.Graphics.FillRectangle (Brushes.LimeGreen, 0, 0, 10, 10);         // un carré logique de 10x10
}

Il en va de même pour e.ClipRectangle, et pour e.Canvas si vous dessinez directement avec SkiaSharp. PaintEventArgs.Scaling reste disponible pour le code qui veut placer quelque chose sur un pixel physique précis, tout comme ScaledWidth, ScaledBounds et LogicalToDeviceUnits.

La saisie est cohérente sans effort supplémentaire : MouseEventArgs.X/Y arrivent dans les mêmes unités logiques que Width/Height et le canevas de dessin, de sorte qu’une géométrie construite une fois sert aux deux.

Pour aller plus loin

Migrer une application WinForms existante

Vous reprenez une base de code existante plutôt que de partir de zéro ? Deux documents couvrent le sujet :

Stade bêta : l’API se stabilise et tous les recoins de WinForms ne sont pas encore couverts. C’est un bon choix pour de nouvelles applications métier multiplateformes et pour migrer de vraies applications dès aujourd’hui — figez simplement votre version.