İngilizce dilinde oku

Aracılığıyla paylaş


.NET 9 için Windows Forms'daki yenilikler

Bu makalede.NET 9 için Windows Forms'taki yenilikler açıklanmaktadır.

Zaman uyumsuz formlar

Önemli

Bu özellik kümesi, Control.InvokeAsyncdışında deneyseldir.

Modern uygulamalar zaman uyumsuz iletişim modelleri gerektirir. .NET'te Windows Forms büyüdükçe, daha fazla bileşen ui iş parçacığında çalıştırmak için bir async yönteme hazırlama gerektirir. Örneğin, WebView2, yerel Windows 10 ve Windows 11 API'leri veya Anlam Çekirdeği gibi modern zaman uyumsuz kitaplıklar gibi denetimler. Başka bir senaryo da WPF, WinUI veya .NET MAUI gibi diğer kullanıcı arabirimi yığınlarından Windows Forms ile yerleşik async MVVM ViewModel'leri paylaşmanız olabilir.

Zaman uyumsuz senaryoları desteklemek için eklenen yeni yöntemlerin listesi aşağıdadır:

Bu API, deneysel olduğundan bir derleyici hatasının arkasında korunur. Hatayı engellemek ve API'ye erişimi etkinleştirmek için proje dosyanıza aşağıdakileri PropertyGroup ekleyin:

XML
<PropertyGroup>
    <NoWarn>$(NoWarn);WFO5002</NoWarn>
</PropertyGroup>

İpucu

Bu kuralı gizleme hakkında daha fazla bilgi için bkz . Derleyici Hatası WFO5002.

BinaryFormatter artık desteklenmiyor

BinaryFormatter , hizmet reddine (DoS), bilgilerin açığa çıkmasına veya uzaktan kod yürütülmesine neden olabilecek seri durumdan çıkarma saldırılarına karşı savunmasız olduğundan güvenli olmadığı kabul edilir. Seri durumdan çıkarma güvenlik açıkları iyi anlaşılmadan önce uygulanmıştır ve tasarımı modern güvenlik en iyi yöntemlerini izlemez.

.NET 9'dan başlayarak, bu güvenlik risklerini önlemek için uygulaması kaldırıldı. Kullanıldığında BinaryFormatter , PlatformNotSupportedException özel durum oluşturulur.

Pano ve sürükle bırak işlemleri için verileri seri hale getirme ve en önemlisi Windows Forms Tasarımcısı gibi birçok senaryoda kullanılan BinaryFormatter Windows Forms. Windows Forms, bilinen bir tür kümesiyle belirli kullanım örneklerini işlemek için dahili olarak daha güvenli bir alt kümesi BinaryFormatter kullanmaya devam eder.

.NET 9 için Windows Forms, ikili serileştirmeye farkında olmadan katıldığınız zamanları belirlemenize yardımcı olan çözümleyicilerle birlikte gönderilmektedir.

hakkında BinaryFormatterdaha fazla bilgi için bkz . BinaryFormatter için Windows Forms geçiş kılavuzu.

Koyu mod

Önemli

Bu özellik kümesi deneyseldir.

.NET 10'da desteği sonlandırmak amacıyla Windows Forms'a koyu mod için ön destek eklendi. Renk modu değiştiğinde SystemColors , ile eşleşecek şekilde değiştirilir. Uygulamanın renk modu aşağıdaki değerlerden birine ayarlanabilir:

  • SystemColorMode.Classic—(varsayılan) Windows Forms'un önceki sürümleriyle aynı ışık modu.
  • SystemColorMode.System—Windows tarafından ayarlanan açık veya koyu moda dikkat edin.
  • SystemColorMode.Dark—Koyu modu kullanın.

Renk modu uygulamak için program başlangıç kodunu çağırın Application.SetColorMode(SystemColorMode) :

C#
namespace MyExampleProject;

static class Program
{
    /// <summary>
    ///  The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        // To customize application configuration such as set high DPI settings or default font,
        // see https://aka.ms/applicationconfiguration.
        ApplicationConfiguration.Initialize();
        Application.SetColorMode(SystemColorMode.Dark);
        Application.Run(new Form1());
    }    
}
VB
Friend Module Program

    <STAThread()>
    Friend Sub Main(args As String())
        Application.SetHighDpiMode(HighDpiMode.SystemAware)
        Application.EnableVisualStyles()
        Application.SetCompatibleTextRenderingDefault(False)
        Application.SetColorMode(SystemColorMode.Dark)
        Application.Run(New Form1)
    End Sub

End Module

Bu API, deneysel olduğundan bir derleyici hatasının arkasında korunur. Hatayı engellemek ve API'ye erişimi etkinleştirmek için proje dosyanıza aşağıdakileri PropertyGroup ekleyin:

XML
<PropertyGroup>
    <NoWarn>$(NoWarn);WFO5001</NoWarn>
</PropertyGroup>

İpucu

Bu kuralı gizleme hakkında daha fazla bilgi için bkz . Derleyici Hatası WFO5001.

FolderBrowserDialog geliştirmeleri

FolderBrowserDialog artık dizide depolanan birden çok klasör seçmeyi SelectedPaths destekliyor. Birden çok klasörü etkinleştirmek için olarak Multiselectayarlayıntrue.

System.Drawing yeni özellikler ve geliştirmeler

System.Drawing kitaplığında GDI+ efektlerini sarmalama, için ReadOnlySpandestek ve daha iyi birlikte çalışma kodu oluşturma gibi birçok geliştirme vardır.

System.Drawing, GDI+ efektlerini destekler

System.Drawing kitaplığı artık bulanıklaştırma ve renk tonu gibi GDI+ bit eşlem efektlerini destekliyor. Efektler GDI+'nın bir parçası olmuştur ancak şimdiye kadar System.Drawing aracılığıyla gösterilmemiştir.

Efektler yöntemi çağrılarak Bitmap öğesine Bitmap.ApplyEffect(Effect, Rectangle) uygulanır. Efektin uygulanacağı alan için efekti ve isteğe bağlı Rectangle olarak belirtin. Görüntünün tamamını işlemek için kullanın Rectangle.Empty .

Ad System.Drawing.Imaging.Effects alanı uygulayabileceğiniz efektleri içerir:

System.Drawing Span'ı destekler

Dizileri kabul eden birçok yöntem de kabul ReadOnlySpanetmek için geliştirilmiştir. Örneğin, , GraphicsPath.AddLines(ReadOnlySpan<Point>)ve Graphics.DrawLines(Pen, ReadOnlySpan<Point>)gibi DrawPolygon(Pen, ReadOnlySpan<Point>)yöntemler bir dizi veya ReadOnlySpankabul eder.

Birlikte çalışma için CsWin32 kullanma

Tüm birlikte çalışma kodu, C# P/Invoke kaynak oluşturucu olan CsWin32 ile değiştirildi.

ToolStrip

ve ToolStrip denetimlerine ToolStripItem aşağıdaki iyileştirmeler eklenmiştir.

  • öğesine ToolStripyeni bir özellik eklendiAllowClickThrough.

    olarak trueayarlandığında, form odaksızken denetimle etkileşim kurulabilir.

.NET Core 3.1 yayınlandığında ve Menugibi MainMenu tüm MenuItemilgili denetimler kaldırıldı. ToolStrip ve ToolStripMenuItem bunun yerine kullanılmalıdır. Bununla birlikte, ToolStripItemiçin ToolStripMenuItemtemel sınıfı, olayının MenuItem.Select yerine geçemedi. Bu olay, öğeyi vurgulamak için fare veya klavye kullanıldığında tetiklendi.

.NET 9, bir menü öğesinin ne zaman vurgulandığını algılamak için kullanılabilen öğesini ekledi ToolStripItem.SelectedChanged.