Windows Forms (WinForms)

Eintrag zuletzt aktualisiert am: 19.02.2025

Windows Forms (oft abgekürzt mit WinForms) ist die älteste Desktop-Oberflächenbibliothek in .NET, die im klassischen .NET Framework-Setup, aber auch in den modernen .NET-Versionen in der .NET Desktop Runtime noch enthalten ist und dort auch weiterhin verbessert wird.

Windows Forms basiert auf der klassischen Windows-Programmierschnittstelle (Win32 API). Man kann Windows Forms als eine Wrapper-Bibliothek verstehen für im Windows-Betriebssystem vorhandene Fenstertechniken und Steuerelemente. Zusätzlich wird in Windows Forms GDI+ für die Grafikdarstellung verwendet (z. B. Zeichnen von Formen, Rendern von Text und Bildern).

Werkzeuge

Es gibt innerhalb der Entwicklungsumgebung Visual Studio einen mächtigen WYSIWYG-Designer für Windows Forms-Oberflächen. Der Designer erzeugt aber nicht, wie heute in GUI-Frameworks üblich, eine Markup-Sprache, sondern einen Programmcode in C# oder Visual Basic .NET. Entwicklerinnen und Entwickler, die die Oberfläche lieber durch Eintippen statt Klicken erstellen wollen, können den GUI-Programmcode selbst schreiben, das ist aber aufwändig und fehleranfällig. Daher ist der Einsatz des Designers Usus.

Design

Windows Forms-Anwendungen mit reinen Bordmitteln wirken aus heutiger Design-Sicht optisch altbacken. Die Anpassung des Designs der Steuerelemente ist grundsätzlich möglich, aber in der Implementierung oft sehr aufwändig. Es gibt aber einige kommerzielle Steuerelementanbieter, die zahlreiche Windows Forms-Steuerelemente mit modernem Look & Feel und Anpassbarkeit durch Theming anbieten.

Steuerelemente

Microsoft liefert in Windows Forms einige Basissteuerelemente mit, aber höherwertige Steuerelemente wie Wizards, Ribbons, Karusselle, Docking Manager, Diagramme, Tabellenkalkulationen, Kalender, Berichte, PDF-Viewer u.a. muss man kaufen bei Komponentenanbietern wie DevExpress, Syncfusion, Telerik, Infragistics und Component One (siehe Tabelle). Microsoft sieht sich selbst als Anbieter der Basisinfrastruktur und hat keinerlei Bestrebungen, höherwertige Steuerelemente anzubieten. Das gilt nicht nur für Windows Forms, sondern für alle GUI-Frameworks von Microsoft.

Ausgewählte kommerzielle GUI-Komponentenanbieter für Windows Forms

DevExpress WinForms Component Subscription
https://www.devexpress.com/products/net/controls/winforms /


Telerik UI for WinForms
https://www.telerik.com/products/winforms.aspx


Syncfusion WinForms UI Controls Library
https://www.syncfusion.com/winforms-ui-controls


MESCIUS (vormals GrapeCity) ComponentOne Studio for WinForms
https://www.grapecity.com/componentone/net/winforms


Infragistics Ultimate UI for Windows Forms
https://www.infragistics.com/products/windows-forms


Text Control TX Text Control .NET
https://www.textcontrol.com/products/


Xceed Grid, Chart, Editors, Input Validator, Docking
Windows https://xceed.com/products/winforms-activex/

Actipro Windows Forms Controls
https://www.actiprosoftware.com/products/controls/windowsforms

Windows Forms im klassischen .NET Framework

Windows Forms wurde in .NET Framework 1.0 (erschienen am 13. Februar 2002) eingeführt und bekam in .NET Framework 2.0 einen großen Schub durch zahlreiche neue und verbesserte Steuerelemente. Windows Forms wurde im klassischen .NET Framework aber seitdem nicht mehr wesentlich weiterentwickelt, da Microsoft mit .NET Framework 3.0 die Windows Presentation Foundation (WPF) als Alternative eingeführt hat.

Windows Forms im modernen .NET

Am 23. September 2019 erschien Windows Forms dann aber im Rahmen von .NET Core 3.0 auch für das moderne .NET [https://www.heise.de/hintergrund/Umstieg-auf-NET-Core-Desktop-Anwendungen-mit-WPF-und-Windows-Forms-umstellen-4640058.html], läuft aber trotz der grundsätzlichen Plattformunabhängigkeit von .NET Core auch damit nur auf Windows. In .NET Core 3.1 hat Microsoft einige ältere Windows Forms-Steuerelemente ausgebaut, obwohl es diese in .NET Core 3.0 schon gab [https://www.heise.de/blog/NET-Core-3-1-ist-ein-ungewoehnliches-Release-4612970.html]. Das war ein Verstoß gegen das Semantic Versioning, für den Microsoft sich aber entschuldigte [https://devblogs.microsoft.com/dotnet/announcing-net-core-3-1/]. Beweggrund für diese unerlaubten Breaking Changes war, dass Microsoft es sich bei der Portierung des Windows Forms-Designers für Visual Studio einfacher machen wollte. Die entfernten Steuerelemente sind alles Steuerelemente, die in .NET Framework 1.0 eingeführt wurden und für die es ab .NET Framework 2.0 bessere Alternativen gab. Weitere ältere Steuerelemente sind in .NET 5.0 entfallen https://docs.microsoft.com/en-us/dotnet/core/compatibility/windows-forms/5.0/winforms-deprecated-controls; dies stellte aber dann jedoch keinen Bruch gegen die Regeln des Semantic Versioning dar. Eine Migration einer Windows Forms-Oberfläche vom klassischen .NET Framework zum modernen .NET ist sehr unaufwändig, sofern man nicht die älteren Steuerelemente verwendet, die entfallen sind.

Migration einer Windows Forms-Oberfläche vom klassischen .NET Framework zum modernen .NET

Eine Migration einer Windows Forms-Oberfläche vom klassischen .NET Framework zum modernen .NET ist sehr unaufwändig, sofern man nicht die älteren Steuerelemente verwendet, die entfallen sind.

Windows Forms auf anderen Plattformen

Die Windows Forms-Implementierung im Rahmen von Microsoft .NET läuft nur auf Windows, auch im modernen, plattformneutralen .NET. Es gibt auch eine plattformneutrale Implementierung von Windows Forms im Rahmen des Mono-Projekts. Mono ist eine Nachimplementierung des klassischen .NET Frameworks einschließlich Windows Forms und ASP.NET Model View Controller (MVC).

Im Rahmen von "One .NET" nicht aus Mono in das moderne .NET übernommen wurde das plattformneutrale Windows Forms. Allerdings hat das Wine-Projekt die alte Mono-Implementierung übernommen https://gitlab.winehq.org/wine-mono/mono. Die meisten Teile der Windows Forms-Implementierung sind seit Jahren nicht mehr angefasst worden, aber es gibt immer mal wieder einzelne kleinere Beiträge im Repository https://gitlab.winehq.org/mono/mono/-/tree/main/mcs/class/System.Windows.Forms

Verbreitung von Windows Forms

In Deutschland und weltweit arbeiten immer noch viele Entwicklerinnen und Entwickler an Windows Forms-Anwendungen. Dies sind aber primär bestehende Anwendungen. Neuentwicklungen mit Windows Forms sind selten und finden hauptsächlich in Entwicklungsteams statt, die bisher schon mit Windows Forms arbeiten. Diese Zielgruppe will Microsoft mit den neuen Features in Windows Forms fördern.

Namensraum

Die Windows Forms werden im FCL-Namensraum System.Windows.Forms bereitgestellt. In der Beta-Version des .Net Framework 1.0 hieß der Namensraum noch System.WinForms. Daher sprechen auch heute noch viele Entwickler kurz von "WinForms".

Standardisierung

Windows Forms gehören zu den Teilen der .NET Framework Class Library, die nicht Teil des ISO- und ECMA-Standards "CLI" sind.

Vergleich zu Java

Pendants zu Windows Forms in Java sind Bibliothek wie das Abstract Window Toolkit (AWT), Swing und Standard Widget Toolkit (SWT).

Deployment von Windows Forms-Anwendungen

Beim Verteilen von fertigen Anwendungen muss man zwischen klassischen .NET Framework und modernem .NET unterscheiden. Beim klassischen .NET Framework hat man immer ein sogenanntes Framework Dependent Deployment (FDD): Bevor man die WPF-Anwendung verteilen kann, muss das .NET Framework installiert werden. Das FDD gibt es auch noch im modernen .NET. Alternativ können Entwicklerinnen und Entwickler eine Self-Contained-App kompilieren, die alle benötigen Teile der Laufzeitumgebung und alle benötigen Teile der Kernbibliothek mitbringt. Die Verbreitung von Windows Forms-Anwendungen erfolgt über Installationsverfahren wie ClickOnce, MSI, MSIX, Microsoft Store, InstallShield, Inno Setup, Chocolatey, WinGet etc.

Neuerungen in Windows Forms in .NET Core 3.0

  • Application.SetHighDpiMode(HighDpiMode.PerMonitorV2)

Neuerungen in Windows Forms in .NET 5.0

  • Neues Steuerelement: TaskDialog = ausgebaute Messagebox
  • ListView mit zusammenklappbaren Gruppen
  • FileDialog mit mehrfach-Zustand via ClientGuid
  • Verbesserungen für UI-Automation

Neuerungen in Windows Forms in .NET 6.0

  • Windows Forms auf Windows Arm64
  • Application.SetDefaultFont()
  • Designer Hosting (wie in .NET Framework)

Neuerungen in Windows Forms in .NET 7.0

Neuerungen in Windows Forms in .NET 8.0

MVVM nun offiziell stabil

Neuerungen in Windows Forms in .NET 9.0

  • Dark Mode
  • Mehrfachauswahl im Steuerelement FolderBrowserDialog
  • Das Control-Steuerelement, von dem alle Steuerelemente in Windows Forms und auch das Formular als solches erbt, besitzt nun eine Methode InvokeAsync() zur einfachen Ausführung asynchroner Aufgaben.