A .NET 9-hez készült Windows Forms újdonságai
Ez a cikk a .NET 9-hez készült Windows Forms újdonságait ismerteti.
Aszinkron űrlapok
Fontos
Ez a funkciókészlet kísérleti jellegű, kivéve Control.InvokeAsync
.
A modern alkalmazások aszinkron kommunikációs modelleket igényelnek. A Windows Forms .NET-en való megjelenésével egyre több összetevőhöz szükséges egy async
metódust használni a felhasználói felületen való futtatáshoz. Például olyan vezérlők, mint WebView2, natív Windows 10 és Windows 11 API-k, vagy modern aszinkron kódtárak, például Szemantikus kernel. Egy másik forgatókönyv az lenne, ha async
köré épített MVVM ViewModel-eket oszt meg más felhasználói felületi veremekből, például WPF-ből, WinUI-ból vagy .NET MAUI-ból származó Windows Formsokkal.
Az aszinkron forgatókönyvek támogatásához hozzáadott új metódusok listája:
- System.Windows.Forms.Form.ShowAsync
- Form.ShowDialogAsync
- TaskDialog.ShowDialogAsync
- Control.InvokeAsync (Ez az API nem kísérleti.)
Ez az API egy fordítóhiba mögött van védve, mert kísérleti. A hiba megszüntetéséhez és az API-hoz való hozzáférés engedélyezéséhez adja hozzá a következő PropertyGroup
a projektfájlhoz:
<PropertyGroup>
<NoWarn>$(NoWarn);WFO5002</NoWarn>
</PropertyGroup>
Borravaló
A szabály letiltásáról további információt Fordítási hiba WFO5002című témakörben talál.
A BinaryFormatter már nem támogatott
BinaryFormatter
nem biztonságos, mert sebezhető a deszerializálási támadásokkal szemben, ami szolgáltatásmegtagadáshoz (DoS), információ felfedéséhez vagy távoli kódfuttatáshoz vezethet. A deszerializálási biztonsági rések megismerése előtt implementálták, és a kialakítása nem követi a modern biztonsági ajánlott eljárásokat.
A .NET 9-től kezdve az implementációja el lett távolítva, hogy megelőzze ezeket a biztonsági kockázatokat. Ha a BinaryFormatter
-t használják, a PlatformNotSupportedException
kivételt kibocsátják.
A Windows Forms számos forgatókönyvben használja a BinaryFormatter
-t, például amikor adatokat szerializálunk a vágólapra és a húzás-leejtés műveletekhez, és ami a legfontosabb, a Windows Forms Designer esetében. A Windows Forms belsőleg továbbra is a BinaryFormatter
biztonságosabb részhalmazát használja az ismert típusokkal rendelkező konkrét használati esetek kezelésére.
A .NET 9-hez készült Windows Forms olyan elemzőkkel szállít, amelyek segítenek azonosítani a bináris szerializálásban való tudatlan részvétel idejét.
A BinaryFormatter
további információ: BinaryFormatterWindows Forms áttelepítési útmutatója.
Sötét mód
Fontos
Ez a funkciókészlet kísérleti jellegű.
A Sötét mód előzetes támogatása a Windows Formshoz lett hozzáadva, azzal a céllal, hogy véglegesíthesse a támogatást a .NET 10-ben. Amikor a színmód megváltozik, a SystemColors módosul, hogy megfeleljen. Az alkalmazás színmódja az alábbi értékek egyikére állítható be:
-
SystemColorMode.Classic
– (alapértelmezett) Egyszerűsített mód, ugyanaz, mint a Windows Forms korábbi verziói. -
SystemColorMode.System
– Tartsa tiszteletben a Windows által beállított világos vagy sötét módot. -
SystemColorMode.Dark
– Sötét mód használata.
Színmód alkalmazásához hívja meg a Application.SetColorMode(SystemColorMode) a program indítási kódjában:
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
Ez az API egy fordítóhiba mögött van védve, mert kísérleti. A hiba megszüntetéséhez és az API-hoz való hozzáférés engedélyezéséhez adja hozzá a következő PropertyGroup
a projektfájlhoz:
<PropertyGroup>
<NoWarn>$(NoWarn);WFO5001</NoWarn>
</PropertyGroup>
Borravaló
A szabály letiltásáról további információt Fordítási hiba WFO5001című témakörben talál.
A FolderBrowserDialog fejlesztései
FolderBrowserDialog
mostantól támogatja a SelectedPaths tömbben tárolt mappák kijelölését. Több mappa engedélyezéséhez állítsa Multiselecttrue
értékre.
A System.Drawing új funkciói és fejlesztései
A System.Drawing kódtár számos fejlesztésen esett át, többek között gDI+ effektusok burkolásával, ReadOnlySpan
támogatásával és jobb kódlétrehozással.
A System.Drawing támogatja a GDI+ effektusokat
A System.Drawing kódtár mostantól támogatja a GDI+ bitképeffektusokat, például az elmosódást és a színárnyalatot. Az effektusok a GDI+-nak a részét képezték, de mostanáig nem voltak elérhetők a System.Drawing-ban.
A Bitmap-ra az Bitmap.ApplyEffect(Effect, Rectangle) metódus meghívásával alkalmazzák az effektusokat. Adja meg az effektust, és adjon meg egy opcionális Rectangle
jelzőt az alkalmazási terület meghatározásához. A Rectangle.Empty használatával dolgozza fel a teljes képet.
A System.Drawing.Imaging.Effects névtér tartalmazza az alkalmazható effektusokat:
- BlackSaturationCurveEffect
- BlurEffect
- BrightnessContrastEffect
- ColorBalanceEffect
- ColorCurveEffect
- ColorLookupTableEffect
- ColorMatrixEffect
- ContrastCurveEffect
- CurveChannel
- DensityCurveEffect
- ExposureCurveEffect
- GrayScaleEffect
- HighlightCurveEffect
- InvertEffect
- LevelsEffect
- MidtoneCurveEffect
- ShadowCurveEffect
- SharpenEffect
- TintEffect
- VividEffect
- WhiteSaturationCurveEffect
A System.Drawing támogatja a Span-t
Számos olyan metódus került továbbfejlesztésre, amely elfogadta a tömböket, hogy a ReadOnlySpan
-t is elfogadja. Például az olyan metódusok, mint a GraphicsPath.AddLines(ReadOnlySpan<Point>), a Graphics.DrawLines(Pen, ReadOnlySpan<Point>)és a DrawPolygon(Pen, ReadOnlySpan<Point>), elfogadnak egy tömböt vagy ReadOnlySpan
.
A CsWin32 használata az interophoz
Az összes interop-kód helyébe CsWin32, egy C# P/Invoke forrásgenerátor lépett.
ToolStrip
A következő fejlesztések lettek hozzáadva a ToolStrip és ToolStripItem vezérlőkhöz.
Új tulajdonság lett hozzáadva
ToolStrip
, AllowClickThrough.Ha
true
értékre van állítva, a vezérlőelem akkor is használható, ha az űrlap nincs fókuszban.
A .NET Core 3.1 kiadásakor az összes Menu
kapcsolódó vezérlő, például MainMenu
és MenuItem
el lett távolítva. ehelyett ToolStrip
és ToolStripMenuItem
kell használni. A ToolStripItem
, amely a ToolStripMenuItem
alaposztálya, azonban nem rendelkezett helyettesítéssel a MenuItem.Select
eseményhez. Ez az esemény akkor jött létre, amikor az egérrel vagy a billentyűzettel kiemelték az elemet.
A .NET 9 hozzáadott ToolStripItem.SelectedChanged, amely a menüelem kiemelésének észlelésére használható.
.NET Desktop feedback