Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Artikel bietet eine allgemeine Übersicht über die Neuerungen mit Windows Forms (WinForms) in .NET 11 Preview. Ausführliche Informationen finden Sie unter Release-Ankündigungen. Verwenden Sie die Releaseankündigungen, um einen Überblick über die gesamte .NET 11-Version zu erhalten. Der Rest dieses Artikels hebt die wichtigsten Änderungen an Windows Forms hervor.
.NET 11 Preview 7 wurde im August 2026 veröffentlicht.
Release-Ankündigungen
Jede Veröffentlichungsankündigung enthält detaillierte Informationen zu Windows Forms Änderungen für .NET 11:
- .NET 11 Vorschau 7
- .NET 11 Vorschau 6
- .NET 11 Vorschau 5
- .NET 11 Vorschau 4
- .NET 11 Preview 3
- .NET 11 Vorschau 2
- .NET 11 Vorschau 1
Visuelle Stile und Darstellung
System.Windows.Forms.Application.SetDefaultVisualStylesMode und die neue System.Windows.Forms.Control.VisualStylesMode-Eigenschaft ermöglichen es Ihnen, eine überarbeitete Rendering-Pipeline auf Anwendungs- und Steuerelementebene zu aktivieren. Wählen Sie zwischen dem klassischen Renderer (VisualStylesMode.Classic), vollständig deaktivierten visuellen Stilen (VisualStylesMode.Disabled) und dem modernen Renderer (VisualStylesMode.Net11).
VisualStylesMode.Latest wird immer zum neuesten Modus aufgelöst, den die Laufzeit unterstützt. Untergeordnete Steuerelemente sind standardmäßig auf VisualStylesMode.Inherit festgelegt, sodass die Einstellung vom übergeordneten auf das untergeordnete Element vererbt wird.
Der Net11 Modus bietet modernisiertes Rendering für Button, CheckBox, , RadioButton, GroupBox, TextBoxund RichTextBox. Die FlatStyle Eigenschaft für Schaltflächen und Kontrollkästchen sowie die BorderStyle Eigenschaft in Textfeldern definieren die Renderformatvorlage. Das Eigenschaftsraster stellt jetzt die Eigenschaft Padding für Textfelder und Rich-Text-Felder bereit und wendet sie an, wenn VisualStylesModeNet11 oder höher ist.
Control.VisualStylesMode ist eine Umgebungseigenschaft, ähnlich wie BackColor oder Font. Die Auflösung durchläuft die übergeordnete Kette, und wenn sie die oberste Ebene erreicht, fällt sie durch Application.DefaultVisualStylesMode. Rufen Sie Control.GetVisualStylesModeChangeImpact auf, um zu sehen, was bei Änderungen der Modi aktualisiert werden muss, und verwenden Sie die Control.EffectiveVisualStylesMode Eigenschaft, um den nach der Vererbung ermittelten Wert abzurufen.
using System.Windows.Forms;
Application.SetDefaultVisualStylesMode(VisualStylesMode.Net11);
Form form = new()
{
Text = "Modern visual styles",
VisualStylesMode = VisualStylesMode.Latest,
};
ComboBox combo = new() { Dock = DockStyle.Top };
combo.Items.AddRange(["One", "Two", "Three"]);
form.Controls.Add(combo);
Application.Run(form);
Reagieren auf visuelle Systemeinstellungen
System.Windows.Forms.Application.SystemVisualSettings macht Akzentfarbe, Zustand mit hohem Kontrast, Sichtbarkeit der Tastatur, Einstellungen für Animationen im Clientbereich, Fokusrahmenmetriken und Textskalierungsfaktor als einzelne Momentaufnahme verfügbar. Das neue System.Windows.Forms.Application.SystemVisualSettingsChanged Ereignis wird ausgelöst, wenn sich eine dieser Kategorien ändert, sodass Sie nur die betroffene Benutzeroberfläche aktualisieren können, anstatt Designressourcen in jeder Benachrichtigung neu zu erstellen.
System.Windows.Forms.SystemVisualSettingsChangedEventArgs.Changed ist ein SystemVisualSettingsCategories Flagswert, der angibt, welche Kategorien geändert wurden. Steuerelemente können OnSystemVisualSettingsChanged überschreiben, um lokal zu reagieren.
using System.Drawing;
using System.Windows.Forms;
Application.SystemVisualSettingsChanged += (sender, e) =>
{
if ((e.Changed & SystemVisualSettingsCategories.AccentColor) != 0)
{
Color accent = e.NewSettings.AccentColor;
Console.WriteLine($"Accent color changed to {accent}.");
}
if ((e.Changed & SystemVisualSettingsCategories.TextScale) != 0)
{
Console.WriteLine($"Text scale is now {e.NewSettings.TextScaleFactor:P0}.");
}
};
Verzögertes Einblenden eines Formulars
System.Windows.Forms.FormRevealMode ermöglicht Anwendungen die Kontrolle darüber, wann ein Formular beim Start sichtbar wird.
FormRevealMode.Deferred hält ein Formular verborgen, bis sein anfängliches Layout und Design eingerichtet sind, und vermeidet so das kurze Aufblitzen eines Fensters ohne Gestaltung, wenn der Dunkelmodus oder die neuen visuellen Stile angewendet werden, nachdem das Formular erstmals angezeigt wurde.
FormRevealMode.Classic behält das bestehende „Sofort anzeigen“-Verhalten bei, und FormRevealMode.Inherit richtet sich nach dem mit Application.SetDefaultFormRevealMode festgelegten Wert. Rufen Sie mit Application.IsFormRevealDeferred den aufgelösten Status ab, und behandeln Sie das Form.FormRevealModeChanged-Ereignis, wenn sich der Wert ändert.
using System.Windows.Forms;
Application.SetDefaultVisualStylesMode(VisualStylesMode.Net11);
Application.SetDefaultFormRevealMode(FormRevealMode.Deferred);
Form form = new() { Text = "No unstyled flash on startup" };
Application.Run(form);
Malen während Massenmutationen sperren
Die neue System.Windows.Forms.ISupportSuspendPainting Schnittstelle und die ControlMutationExtensions.SuspendPainting Erweiterungsmethode kombinieren BeginUpdate/EndUpdate und SuspendLayout/ResumeLayout in einem einzigen IDisposable Bereich.
LayoutSuspendTraversal legt fest, ob die Aussetzung nur auf das Ziel oder auf das Ziel und alle untergeordneten Elemente angewendet wird. Dieser Ansatz ist nützlich, wenn Sie Änderungen an geschachtelten TableLayoutPanel Container mit automatischer Größenanpassung anwenden, wobei das Aussetzen Layout-Stürme und Flackern verhindert.
ComboBox, ListBox, ListView, RichTextBoxund TreeView jetzt implementieren ISupportSuspendPainting. Sie wickeln ihre etablierten Unterbrechungsmuster (BeginUpdate/EndUpdate) über die neue Schnittstelle ab, sodass Massenänderungen Flackern vermeiden, ohne mehrere gekoppelte Aufrufe verwalten zu müssen. Für alle anderen Steuerelemente ist das Verhalten beim Aussetzen neu.
using System.Windows.Forms;
ListBox list = new();
using (list.SuspendPainting(LayoutSuspendTraversal.Target))
{
for (int i = 0; i < 10_000; i++)
{
list.Items.Add($"Item {i}");
}
}
Umschaltschalterdarstellung für CheckBox und RadioButton
System.Windows.Forms.Appearance.ToggleSwitch ist ein neuer Wert für CheckBox.Appearance, der das Steuerelement unter VisualStylesMode.Net11 als Schalter darstellt. Vorhandenes Checked, CheckedChanged und das Datenbindungsverhalten bleiben unverändert, sodass Sie keine Codeanpassungen vornehmen müssen, wenn Sie ein CheckBox auf das neue Erscheinungsbild umstellen. Sie können Kontrollkästchen-Steuerelemente modernisieren, um sie an moderne UI-Konventionen anzupassen, ohne auf Breaking Changes zu stoßen.
using System.Windows.Forms;
CheckBox toggle = new()
{
Text = "Enable notifications",
Appearance = Appearance.ToggleSwitch,
Checked = true,
};
Important
Das Renderverhalten für visuelle Stile und die zugehörigen neuen APIs ist noch nicht endgültig festgelegt und ändert sich weiterhin, bis .NET 11 die GA erreicht. Basierend auf explorativen Tests und Kundenfeedback nehmen Steuerelemente, die Einstellungen für den nicht klassischen visuellen Stil verwenden, in kommenden .NET 11-Versionen (RC, GA) möglicherweise mehr oder weniger Platz ein als in Preview 7. Das Verhalten der neuen APIs kann sich ebenfalls detailliert oder in bestimmten Szenarien ändern.
Vermeiden Sie aus diesem Grund pixelgenaues Design, wenn Sie diese Features übernehmen. Bevorzugen Sie layoutbasierte Verfahren unter Verwendung von TableLayoutPanel und FlowLayoutPanel, die sich automatisch an Änderungen der Steuerelementmetriken anpassen.
Zwischenablage
Clipboard.GetText mit TextDataFormat.Rtf liest jetzt RTF-Zwischenablagedaten korrekt, die keinen Null-Terminator enthalten. Diese Lösung behebt ein Problem, bei dem gültige RTF-Inhalte, die aus Anwendungen kopiert wurden, wie z. B. PowerPoint eine leere Zeichenfolge zurückgegeben haben.
GetDataObject() gibt einen
IDataObjectWert zurück, der Bitmapdaten enthalten kann, die in der Zwischenablage platziert sind, und GetImage() ruft das Bitmapbild aus diesem Datenobjekt ab. GetImage() ruft das Bild auch direkt aus der Zwischenablage ab. GetImage() ruft jetzt Bilder über die eingegebene Zwischenablagepipeline ab, indem sie aufruftTryGetData<Image>(DataFormats.Bitmap, autoConvert: true, ...)und zurückgibtnull, wenn es kein Bild abrufen kann.Mit dem folgenden Code werden Bitmap-Bilder nun korrekt im Roundtrip verarbeitet, wenn
bitmapein vorhandenes Bitmap ist und Sie das Bild über das zurückgegebene Datenobjekt abrufen:// Round-trips again on .NET 11 Clipboard.SetImage(bitmap); Image? image = Clipboard.GetDataObject()?.GetImage();
ToolStrip
ToolStripDropDown behält nun die modale Menünachverfolgung bei Fokusänderungen bei, sodass SmartTag und Dropdown-UI normal geschlossen werden, wenn Benutzer Registerkartenseiten wechseln oder den Fokus auf andere Steuerelemente verschieben. Dadurch wird eine Regression behoben, die dazu führte, dass Dropdowns fälschlicherweise geöffnet bleiben.
ToolStrip Steuerelemente mit
TabStop=trueaktivieren die Menüverarbeitung nach der Tabulatornavigation nicht mehr fälschlicherweise. Bisher verhinderte dieses Verhalten, dass Steuerelemente wie TreeView Eingaben über die Pfeiltasten empfangen.ToolStripDropDownMenu Beim Scrollen werden jetzt die Menügrenzen korrekt berücksichtigt, ohne über die Grenzen hinaus zu scrollen oder das Dropdown versehentlich zu schließen.
ToolStrip DPI-Änderungen behalten jetzt während des DPI-Änderungsprozesses den vorherigen Geräte-DPI-Wert bei, sodass die Skalierungslogik korrekt funktioniert, wenn Sie Steuerelemente zwischen Bildschirmen mit unterschiedlichen DPI-Einstellungen verschieben.
Layout
-
AnchorLayoutV2initialisiert nun fehlende Anker-Metadaten korrekt, wenn verankerte Steuerelemente während eines ausgesetzten Layoutdurchlaufs ersetzt werden, wodurch Layout-Inkonsistenzen verhindert werden.
Designer
Gehostete Windows Forms Designer können steuerelemente jetzt erneut über
CommandSet.OnMenuPasteeinfügen, sodass die Zuvor unterbrochene Einfügefunktion wiederhergestellt wurde.Auflistungs-Editor-Beschriftungen für benutzerdefinierte Steuerelemente zeigen jetzt den zugrunde liegenden Steuerelementtyp anstelle des generierten
ControlProxy<T>Wrappernamens an, wodurch die Identifizierung von Steuerelementen im Designer erleichtert wird.
PropertyGrid
- PropertyGrid.SelectedTab wird jetzt korrekt aktualisiert, wenn PropertyGrid.SelectedObject zugewiesen wird.
Dunkler Modus
- ProgressBar Verfügt jetzt über Standardfarben für Vordergrund- und Hintergrundfarben für das Rendern im dunklen Modus, wodurch die visuelle Konsistenz in Fluent-Designanwendungen verbessert wird.
Fehlerkorrekturen
Control: Die Regression beim SendKeys Parsen von sequenziellen unmittelbaren Modifizierern (wie
^a^c,+a+c,%f%t) wurde behoben. DasKeyboardToolTipStateMachinelöstKeyNotFoundExceptionnicht mehr aus, wenn sich der Fokus während eines QuickInfo-Popupereignisses ändert.ListBox:
IsSynchronizedWerte sind jetzt inListBoxSammlungen korrekt.NumericUpDown: Die Regression bei der Schaltflächendarstellung, die auftrat, wenn visuelle Stile deaktiviert sind, ist behoben.
SplitContainer: Das Steuerelement behandelt nun während des Übergangs der Anzeigesitzung ein vorübergehendes GDI+
ExternalException, wennRepaintSplitterRectaufgerufen wird.ToolStrip: Die Schaltfläche zum Herunterscrollen löst beim Scrollen keinen Fehler mehr aus. Unbestimmte und überprüfte
ToolStripMenuItemSymbole sind jetzt im dunklen Modus sichtbar.PropertyGrid: Schaltflächensymbol „Eigenschaftenseite“ ändert sich nicht mehr, wenn
LargeButtonsbei hoher DPI-Auflösung umgeschaltet wird.ResetHelpForeColorsetzt jetzt die Vordergrundfarbe anstelle der Hintergrundfarbe richtig zurück.PrintPreviewControl:
ForeColorDas Rendering ist jetzt korrekt, wenn es auf „Weiß“ eingestellt ist.Dunkler Modus:
LinkLabelDer Kontrast im dunklen Modus wird verbessert.TabControl, verschachtelt inSplitContainer, entspricht jetzt dem Dunkelmodus.HelpProviderText ist jetzt im dunklen Modus sichtbar.ToolTipwechselt jetzt in den dunklen Modus, wennSystemColorMode.Darkfestgelegt ist.
.NET Desktop feedback