Udostępnij przez


Co nowego w formularzach systemu Windows dla platformy .NET 10

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.

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.Color nieprawidł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: