Dela via


Ändringar i designern sedan .NET Framework (Windows Forms .NET)

Visual Designer för .NET:s Windows Forms har genomgått vissa förbättringar och förändringar sedan .NET Framework. Dessa ändringar påverkar till stor del anpassade kontrollutformare. I den här artikeln beskrivs de viktigaste skillnaderna från .NET Framework.

Visual Studio är ett .NET Framework-baserat program, och som sådan baseras visualdesignern som du ser för Windows Forms också på .NET Framework. Med ett .NET Framework-projekt körs både Visual Studio-miljön och Windows Forms-appen i samma process: devenv.exe. Detta innebär ett problem när du arbetar med en Windows Forms .NET-app (inte .NET Framework). Både .NET- och .NET Framework-kod kan inte fungera inom samma process. Därför använder Windows Forms .NET en annan designer, "out-of-process"-designern.

Utanför-process-designer

Out-of-process-designern är en process som kallas DesignToolsServer.exeoch körs parallellt med Visual Studio devenv.exe-processen. Den DesignToolsServer.exe-processen körs på samma version och plattform av .NET som din app har konfigurerats att rikta sig mot, till exempel .NET 9 och x64.

I Visual Studio-designern skapas .NET Framework-proxyobjekt för varje komponent och kontroll i designern, som kommunicerar med de verkliga .NET-objekten från ditt projekt i DesignToolsServer.exe designern.

Kontrolldesigners

För .NET måste designers för kontroller kodas med Microsoft.WinForms.Designer.SDK-API:et, vilket är tillgängligt på NuGet-. Det här biblioteket är en omstrukturering av .NET Framework-designers för användning i .NET. Alla designertyper har flyttats till olika namnområden, men typnamnen är mestadels desamma. Om du vill uppdatera .NET Framework-designers för .NET måste du justera namnrymderna lite.

  • Designerklasser och andra relaterade typer, till exempel ControlDesigner och ComponentTray, har flyttats från namnområdet System.Windows.Forms.Design till Microsoft.DotNet.DesignTools.Designers namnrymd.
  • Åtgärdslistrelaterade typer i System.ComponentModel.Design namnområdet har flyttats till Microsoft.DotNet.DesignTools.Designers.Actions namnområde.
  • Beteenderelaterade typer, till exempel utsmyckningar och snaplines, i System.Windows.Forms.Design.Behavior namnrymd har flyttats till Microsoft.DotNet.DesignTools.Designers.Behaviors namnrymd.

Redigerare av anpassad typ

Redigerare för anpassade typer är mer komplicerade än kontrolldesigner. Eftersom Visual Studio-processen är .NET Framework-baserad måste alla användargränssnitt som visas i Visual Studio också vara .NET Framework-baserade. Den här designen utgör till exempel ett problem när du skapar en .NET-kontroll som visar en redigerare av anpassad typ som anropas genom att klicka på knappen i egenskapsrutnätet. Dialogrutan kan inte visas i kontexten för Visual Studio.

Designern utanför processen hanterar de flesta funktionerna för kontroldesign, såsom utsmyckningar, inbyggda typredigerare och anpassad målning. Varje gång du behöver visa en anpassad modal dialogruta, till exempel om du vill visa en ny typredigerare, måste du replikera den proxy-objektklientserverkommunikation som out-of-process-designern tillhandahåller. Detta skapar mycket mer omkostnader än det gamla .NET Framework-systemet.

Om dina anpassade kontrollegenskaper använder typredigerare som tillhandahålls av Windows Forms kan du använda EditorAttribute för att markera dina egenskaper med motsvarande .NET Framework-redigerare som du vill att Visual Studio ska använda. Genom att använda de inbyggda redigerarna undviker du kravet på att replikera proxyobjektets klient-server-kommunikation som tillhandahålls av den färdiga designern.

[Editor("System.Windows.Forms.Design.FileNameEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
        "System.Drawing.Design.UITypeEditor, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
public string? Filename { get; set; }
<Editor("System.Windows.Forms.Design.FileNameEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")>
Public Property Filename As String

Skapa en typredigerare

Om du vill skapa anpassade designers som tillhandahåller typredigerare behöver du en mängd olika projekt, enligt beskrivningen i följande lista:

  • Control: Det här projektet är ditt anpassade kontrollbibliotek som innehåller koden för dina kontroller. Det här är biblioteket som en användare refererar till när de vill använda dina kontroller.
  • Control.Client: Ett Windows Forms for .NET Framework-projekt som innehåller dina anpassade dialogrutor för designergränssnittet.
  • Control.Server: Ett Windows Forms för .NET-projekt som innehåller den anpassade designerkoden för dina kontroller.
  • Control.Protocol: Ett .NET Standard-projekt som innehåller kommunikationsklasserna som används både av Control.Client- och Control.Server-projekten.
  • Control.Package: Ett NuGet-paketprojekt som innehåller alla andra projekt. Det här paketet är formaterat på ett sätt som gör att Visual Studio Windows Forms för .NET-verktygen kan hantera och använda ditt kontrollbibliotek och dina formgivare.

Även om din typredigerare härleds från en befintlig redigerare, till exempel ColorEditor eller FileNameEditor, måste du fortfarande skapa den proxy-objektklientserverkommunikationen eftersom du har angett en ny UI-klasstyp som du vill visa i kontexten för Visual Studio. Men koden för att implementera den typen av redigerare i Visual Studio är mycket enklare.

Viktig

Dokumentation som beskriver det här scenariot i detalj pågår. Tills dokumentationen har publicerats använder du följande blogginlägg och exempel för att hjälpa dig att skapa, publicera och använda den här projektstrukturen: