.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.InvokeAsync
dışı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:
- System.Windows.Forms.Form.ShowAsync
- Form.ShowDialogAsync
- TaskDialog.ShowDialogAsync
- Control.InvokeAsync (Bu API deneysel değildir.)
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:
<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 BinaryFormatter
daha 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) :
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());
}
}
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:
<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 ReadOnlySpan
destek 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:
- BlackSaturationCurveEffect
- BlurEffect
- BrightnessContrastEffect
- ColorBalanceEffect
- ColorCurveEffect
- ColorLookupTableEffect
- ColorMatrixEffect
- ContrastCurveEffect
- CurveChannel
- DensityCurveEffect
- ExposureCurveEffect
- GrayScaleEffect
- HighlightCurveEffect
- InvertEffect
- LevelsEffect
- MidtoneCurveEffect
- ShadowCurveEffect
- SharpenEffect
- TintEffect
- VividEffect
- WhiteSaturationCurveEffect
System.Drawing Span'ı destekler
Dizileri kabul eden birçok yöntem de kabul ReadOnlySpan
etmek 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 ReadOnlySpan
kabul 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
ToolStrip
yeni bir özellik eklendiAllowClickThrough.olarak
true
ayarlandığında, form odaksızken denetimle etkileşim kurulabilir.
.NET Core 3.1 yayınlandığında ve Menu
gibi MainMenu
tüm MenuItem
ilgili denetimler kaldırıldı.
ToolStrip
ve ToolStripMenuItem
bunun yerine kullanılmalıdır. Bununla birlikte, ToolStripItem
için ToolStripMenuItem
temel 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.
.NET Desktop feedback