Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten artykuł zawiera ogólne omówienie nowości w formularzach Windows Forms (WinForms) na platformie .NET 10. Aby uzyskać szczegółowe informacje, sprawdź ogłoszenia dotyczące wydania. Skorzystaj z anonsów wydania, aby uzyskać przegląd całej wersji platformy .NET 10. W pozostałych sekcjach przedstawiono niektóre z najważniejszych zmian w Windows Forms.
Platforma .NET 10 została wydana w listopadzie 2025 r.
Ogłoszenia o wydaniach
Każde ogłoszenie o wersji zawiera szczegółowe informacje o zmianach w Windows Forms dla platformy .NET 10.
- .NET 10
- .NET 10 RC2
- .NET 10 RC1
- .NET 10 (wersja zapoznawcza 7)
- .NET 10 (wersja zapoznawcza 6)
- .NET 10 (wersja zapoznawcza 5)
- .NET 10 (wersja zapoznawcza 4)
- .NET 10 (wersja zapoznawcza 3)
- .NET 10 (wersja zapoznawcza 2)
- .NET 10 (wersja zapoznawcza 1)
Zmiany schowka
Windows Forms wysyła nowy kod dla interfejsu API schowka. Schowek został przeprojektowany tak, aby jego kod można było udostępnić w technologii Windows Presentation Foundation (WPF). Obie technologie desktopowe mają teraz ten sam kod i ujednolicają sposób interakcji ze schowkiem. Aby uzyskać więcej informacji, zobacz Schowek formularzy systemu Windows i zmiany obiektu DataObject na platformie .NET 10.
.NET 9 przestarzał BinaryFormatter, który jest używany w niektórych operacjach schowka. Te operacje schowka wymagały, aby wyrazić zgodę na pakiet zgodności lub obejść operację. Aby złagodzić ból odejścia od BinaryFormatter, w .NET 10 pewne metody schowka są uznane za przestarzałe, aby wskazać, że nie powinny być używane. Więcej metod jest dodawanych w celu ułatwienia serializacji JSON za pomocą danych schowka, co pozwala obejść potrzebę BinaryFormatter.
Formularze asynchroniczne
Formularze systemu Windows obsługują w pełni zintegrowane formularze asynchroniczne. Ponadto zadanie asynchroniczne ma teraz słabe odwołanie do formularza, umożliwiając dynamiczne interfejsy użytkownika podczas zarządzania wieloma oknami.
Windows Forms for .NET 9 wprowadził nowe metody obsługi wyświetlania formularzy i okien dialogowych asynchronicznie, ale w trybie w wersji zapoznawczej, w którym trzeba było pominąć błąd kompilatora WFO5002 do korzystania z tej funkcji. Ten błąd kompilatora nie jest już wyzwalany przy użyciu platformy .NET 10.
Następujące interfejsy API nie są już uznawane za eksperymentalne:
Ulepszenia projektanta na zamówienie
Kilka typów UITypeEditor zostało przeniesionych z .NET Framework, w tym ToolStripCollectionEditor oraz kilka edytorów związanych z kontrolką DataGridView. Ci edytorzy są teraz wykrywalni przez PropertyGrid i panel akcji projektanta formularzy systemu Windows.
Linie wyrównania zostały naprawione dla niestandardowych projektantów.
Tryb ciemny
Windows Forms ma w pełni zintegrowaną obsługę trybu ciemnego.
Formularze systemu Windows dla platformy .NET 9 wprowadziły wstępne style wizualne trybu ciemnego, ale w opcjonalnym trybie wersji zapoznawczej, w którym trzeba było pominąć błąd kompilatora WFO5001, aby móc korzystać z tej funkcji. Ta funkcja nie jest już ograniczona przez błąd kompilatora, począwszy od wersji .NET 10.
Interfejs Application.SetColorMode(SystemColorMode) API nie jest już uważany za eksperymentalny.
Wyjaśnienie dotyczące użycia ControlStyles ApplyThemingImplicitly
Kontrolki są zgodne z trybem kolorów ustawionym dla aplikacji, ciemnej lub jasnej. Może jednak wystąpić sytuacja, w której komponujesz i rysujesz własne kontrolki, ale używasz istniejących typowych kontrolek Win32, takich jak pasek przewijania. Te elementy sterujące pozostają jasne, chyba że zgodzisz się zastosować motyw przed odczytaniem właściwości CreateParams. Może też wystąpić sytuacja, w której dziedziczysz kontrolkę, która jest już zgodna z motywami, i chcesz zrezygnować z tego, aby mieć pełną kontrolę nad rysowaniem, na przykład w przypadku przycisku.
Niezależnie od przypadku użycia nadpisz właściwość Control.CreateParams i wywołaj SetStyle(ControlStyles.ApplyThemingImplicitly, true) (włącz) lub SetStyle(ControlStyles.ApplyThemingImplicitly, false) (wyłącz) przed odczytaniem parametrów z klasy bazowej.
Nie można ustawić tego stylu w konstruktorze. Konstruktor podstawowy odczytuje właściwość CreateParams przed wywołaniem Twojego konstruktora. Poniższy fragment kodu pokazuje, jak wyrazić zgodę:
public partial class CustomControl1 : Control
{
protected override CreateParams CreateParams
{
get
{
// Set this style BEFORE base.CreateParams is created and returned.
SetStyle(ControlStyles.ApplyThemingImplicitly, true);
CreateParams cp = base.CreateParams;
// Other logic
return cp;
}
}
// Base class constructor is going to read CreateParams property
// before your constructor code runs.
public CustomControl1()
{
// At this point, CreateParams property is already read, you
// can't set ApplyThemingImplicitly here.
InitializeComponent();
}
}
Public Class CustomControl1
Protected Overrides ReadOnly Property CreateParams As CreateParams
Get
' Set this style BEFORE base.CreateParams is created and returned.
SetStyle(ControlStyles.ApplyThemingImplicitly, True)
Dim cp As CreateParams = MyBase.CreateParams
' Other logic
Return cp
End Get
End Property
' Base class constructor is going to read CreateParams property
' before your constructor code runs.
Sub New()
' At this point, CreateParams property is already read, you
' can't set ApplyThemingImplicitly here.
InitializeComponent()
End Sub
End Class
Poprawki błędów
Poniżej przedstawiono niektóre usterki naprawione w formularzach systemu Windows dla platformy .NET 10:
- Jeśli element DataGridView był w trybie edycji podczas zamykania okna dialogowego hostingu, zostanie wyświetlony komunikat
InvalidOperationException. Usterka powodująca tę usterki została usunięta. -
Błąd kompilatora WFO1000 został ulepszony w celu zmniejszenia liczby wyników fałszywie dodatnich związanych z interfejsami pochodzącymi z
IComponent. - Naprawiono regresję zwracającą
PrinterSettings.DefaultPageSettings.Colornieprawidłową wartość. - Rozwiązywanie przecieku pamięci w składniku MSHTML .
Dostępność
Ulepszona obsługa czytnika ekranu NVDA.
Oczyszczanie kodu
Usunięto przestarzałe środowisko uruchomieniowe platformy .NET i niepotrzebne odwołania do pakietu. Styl kodu został oczyszczony, aby rozwiązać problem z ostrzeżeniami i poprawić jakość kodu.
API trybu przechwytywania ekranu
Wprowadzono nowy interfejs API, aby uniemożliwić aplikacjom przechwytywania ekranu (korzystającym z interfejsu API systemu Windows) przechwytywanie formularza. Ta funkcja jest przydatna do ochrony poufnych informacji, takich jak nazwy użytkowników, identyfikatory użytkowników lub hasła, przed wyciekiem.
Parametr Form.ScreenCaptureMode jest ustawiony na jedną z następujących wartości, aby kontrolować zachowanie przechwytywania:
-
Allow—(Ustawienie domyślne) Umożliwia przechwycenie formularza. -
HideContent— Formularz jest zaciemniany po przechwyceniu. -
HideWindow— rozmywa formularz po przechwyceniu. (Wymaga systemu Windows 10 20H1 w wersji 2004 lub nowszej).
Ulepszenia analizatora
Istniejące analizatory zostały dostosowane w celu zmniejszenia liczby wyników fałszywie dodatnich.
Dodano nowe analizatory:
-
Ostrzeżenie WFDEV004 —
Form.OnClosing,Form.OnClosedoraz korespondujące zdarzenia są przestarzałe. - Ostrzeżenie WFDEV005 —
GetDatametody są przestarzałe. Użyj metodTryGetData<T>zamiast tego. - Ostrzeżenie WFDEV006 — niektóre kontrolki są przestarzałe. Są one udostępniane pod kątem zgodności binarnej z programem .NET Framework.
.NET Desktop feedback