De ontwerpfunctie verandert sinds .NET Framework (Windows Forms .NET)
Visual Designer voor Windows Forms voor .NET heeft enkele verbeteringen en wijzigingen gehad sinds .NET Framework. Deze wijzigingen zijn grotendeels van invloed op ontwerpers van aangepaste bedieningselementen. In dit artikel worden de belangrijkste verschillen van .NET Framework beschreven.
Visual Studio is een toepassing op basis van .NET Framework. De Visual Designer die u voor Windows Forms ziet, is ook gebaseerd op .NET Framework. Met een .NET Framework-project worden zowel de Visual Studio-omgeving als de Windows Forms-app ontworpen, uitgevoerd binnen hetzelfde proces: devenv.exe. Dit vormt een probleem wanneer u werkt met een Windows Forms .NET-app (niet .NET Framework). Zowel .NET- als .NET Framework-code kunnen niet binnen hetzelfde proces werken. Als gevolg hiervan maakt Windows Forms .NET gebruik van een andere ontwerper, de out-of-process designer.
Ontwikkelaar buiten proces
De out-of-process designer is een proces met de naam DesignToolsServer.exeen wordt uitgevoerd naast het devenv.exe van Visual Studio. Het DesignToolsServer.exe proces wordt uitgevoerd op dezelfde versie en hetzelfde platform van .NET waarop uw app is gericht, zoals .NET 9 en x64.
In de Visual Studio-ontwerpfunctie worden .NET Framework-proxyobjecten gemaakt voor elk onderdeel en voor elk besturingselement in de ontwerpfunctie, die communiceren met de echte .NET-objecten van uw project in de DesignToolsServer.exe-ontwerpfunctie.
Ontwerpers van besturingselementen
Voor .NET moeten besturingsontwerpers worden gecodeerd met de Microsoft.WinForms.Designer.SDK
-API, beschikbaar op NuGet-. Deze bibliotheek is een refactoring van de ontwerpers van het .NET Framework voor .NET. Alle ontwerptypen zijn verplaatst naar verschillende naamruimten, maar de typenamen zijn meestal hetzelfde. Als u uw .NET Framework-ontwerpers voor .NET wilt bijwerken, moet u de naamruimten een beetje aanpassen.
- Ontwerpklassen en andere gerelateerde typen, zoals
ControlDesigner
enComponentTray
, zijn verplaatst van deSystem.Windows.Forms.Design
naamruimte naar deMicrosoft.DotNet.DesignTools.Designers
naamruimte. - Actielijst-gerelateerde typen in de
System.ComponentModel.Design
naamruimte zijn verplaatst naar deMicrosoft.DotNet.DesignTools.Designers.Actions
naamruimte. - Gedragsgerelateerde typen, zoals versieringen en snaplines, in de
System.Windows.Forms.Design.Behavior
naamruimte zijn verplaatst naar deMicrosoft.DotNet.DesignTools.Designers.Behaviors
naamruimte.
Aangepaste typbewerkers
Aangepaste typeeditors zijn ingewikkelder dan de besturingsontwerpers. Omdat het Visual Studio-proces is gebaseerd op .NET Framework, moet elke gebruikersinterface die in de context van Visual Studio wordt weergegeven, ook .NET Framework zijn gebaseerd. Dit ontwerp vormt bijvoorbeeld een probleem wanneer u een .NET-besturingselement maakt waarin een aangepaste typeeditor wordt weergegeven die wordt aangeroepen door te klikken op de knop …
in het eigenschappenraster. Het dialoogvenster kan niet worden weergegeven in de context van Visual Studio.
De out-of-process designer verwerkt de meeste functies van de controle-ontwerper, zoals versieringen, ingebouwde type-editors en aangepast schilderen. Wanneer u een aangepast modaal dialoogvenster wilt weergeven, zoals het weergeven van een editor voor nieuwe typen, moet u die client-servercommunicatie van proxyobjecten repliceren die de out-of-process designer biedt. Dit creëert veel meer overhead dan het oude .NET Framework-systeem.
Als uw aangepaste besturingselementeigenschappen gebruikmaken van typeeditors van Windows Forms, kunt u de EditorAttribute gebruiken om uw eigenschappen te markeren met de bijbehorende .NET Framework-editor die u wilt gebruiken in Visual Studio. Door de ingebouwde editors te gebruiken, vermijdt u de noodzaak om de client-servercommunicatie met proxy-objecten te repliceren die door de out-of-process ontwerper wordt geleverd.
[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
Een typeeditor maken
Als u aangepaste ontwerpers wilt maken die typeeditors bieden, hebt u verschillende projecten nodig, zoals wordt beschreven in de volgende lijst:
-
Control
: Dit project is uw aangepaste besturingselementbibliotheek die de code voor uw besturingselementen bevat. Dit is de bibliotheek waarnaar een gebruiker verwijst wanneer ze uw besturingselementen willen gebruiken. -
Control.Client
: een Windows Forms-project voor het .NET Framework met dialoogvensters voor de aangepaste ontwerper-gebruikersinterface. -
Control.Server
: Een Windows Forms-project voor .NET dat de aangepaste ontwerpercode voor uw controls bevat. -
Control.Protocol
: een .NET Standard-project dat de communicatieklassen bevat die zowel door deControl.Client
alsControl.Server
projecten worden gebruikt. -
Control.Package
: een NuGet-pakketproject dat alle andere projecten bevat. Dit pakket is zodanig opgemaakt dat het de Visual Studio Windows Forms voor .NET-hulpprogramma's kan gebruiken en uw besturingsbibliotheek en ontwerpers kan hosten.
Zelfs als uw typeeditor is afgeleid van een bestaande editor, zoals ColorEditor of FileNameEditor, moet u die clientservercommunicatie voor proxyobjecten nog steeds maken omdat u een nieuw type UI-klasse hebt opgegeven dat u wilt weergeven in de context van Visual Studio. De code voor het implementeren van dat type editor in Visual Studio is echter veel eenvoudiger.
Belangrijk
Documentatie waarin dit scenario in detail wordt beschreven, is in ontwikkeling. Totdat deze documentatie is gepubliceerd, gebruikt u het volgende blogbericht en voorbeeld om u te helpen bij het maken, publiceren en gebruiken van deze projectstructuur:
.NET Desktop feedback