Microsoft erweitert .NET 5.0 um ein Windows-Forms-Element

Der seit Windows Vista bekannte TaskDialog ist das erste Steuerelement für Windows Forms, das Einzug in .NET hält, seit 15 Jahren.

In Pocket speichern vorlesen Druckansicht 15 Kommentare lesen
Microsoft erweitert .NET 5.0 um ein Windows-Forms-Element
Lesezeit: 3 Min.
Von
  • Dr. Holger Schwichtenberg
Inhaltsverzeichnis

Microsoft wird in .NET 5.0 zumindest ein neues Steuerelement für das alte GUI-Framework Windows Forms bringen: Der TaskDialog ist ein flexibles Dialogfenster, das es seit Windows Vista in der Betriebssystem-API gibt.

Über Windows Forms war es jedoch bisher nicht direkt als Steuerelement verfügbar, sondern es ließ sich lediglich über die Windows-API nutzen. Es gibt im Netz Beiträge, wie man TaskDialog im Windows API in .NET verwendet, z.B. ein Beitrag auf CodeProject aus dem Jahr 2007.

Die letzten neuen Steuerelement für Windows Forms hatte Microsoft 2005 im Rahmen von .NET Framework 2.0 veröffentlicht und sich danach auf die Windows Presentation Foundation (WPF) konzentriert, die in .NET Framework 3.0 im November 2006 erschien. Aus Redmond kamen zwar in den letzten Jahren immer wieder einige kleinere Verbesserungen für Windows Forms unter anderem für hochauflösende Monitore oder verbesserte Barrierefreiheit, aber die Entwicklung neuer Steuerelemente blieb Drittanbietern überlassen.

Beispiel für einen TaskDialog von der GitHub-Seite

(Bild: Repository des TaskDialog auf GitHub )

Auch das Steuerelement TaskDialog ist ein Beitrag des externen deutschen Entwicklers Konstantin Preißer. Microsoft wird jedoch seine Arbeit in .NET 5.0 integrieren und mit der neuen .NET-Version ausliefern. Da es für das klassische .NET Framework 4.8 keine neuen Features mehr geben soll, wird das Steuerelement dort wohl nicht Einzug halten. Auf der GitHub-Seite von Konstantin Preißer findet man aber eine frühere Version des Steuerelements, das auf .NET Standard 2.0 basiert und damit auch auf dem klassischen .NET Framework läuft.

Der Programmcode zum Erstellen des in der Abbildung gezeigten Dialogs sieht folgendermaßen aus:

TaskDialogCustomButton buttonRestart;
var page = new TaskDialogPage()
{
Icon = TaskDialogIcon.Shield,
MainInstruction = "This task requires the application " +
"to have elevated permissions.",
// TODO - Hyperlinks be possible in a future version
Text = "<A HREF=\"myLink\">Why is using the Administrator " +
"or other account necessary?</A>",

// Show custom buttons as command links.
CustomButtonStyle = TaskDialogCustomButtonStyle.CommandLinks,
// TODO - will be possible in a future version
// EnableHyperlinks = true,

// Show an expander.
Expander = new TaskDialogExpander()
{
Text = "Some expanded Text",
CollapsedButtonText = "View error information",
ExpandedButtonText = "Hide error information",
Position = TaskDialogExpanderPosition.AfterFooter
},

StandardButtons = TaskDialogButtons.Cancel,
CustomButtons =
{
(buttonRestart = new TaskDialogCustomButton()
{
Text = "&Restart under different credentials",
DescriptionText = "This text will be shown in the " +
"second line.",
ElevationRequired = true
}),
new TaskDialogCustomButton()
{
Text = "&Cancel the Task and return",
DefaultButton = true
}
}
};
// Show the dialog and check the result.
var dialog = new TaskDialog(page);
TaskDialogButton result = dialog.ShowDialog();

if (result == buttonRestart)
{
Console.WriteLine("Restarting...");
}

Eine WPF-Variante des Steuerelements ist bisher nicht geplant. Entwickler können aber ohne weiteres Windows-Forms-Dialoge in WPF-Projekten verwenden, indem sie in der Projektdatei den Zusatz <UseWindowsForms>true</UseWindowsForms> zusätzlich zu <UseWPF> eintragen.

Für .NET 5.0 erwägt Microsoft weitere Verbesserungen an bestehenden Steuerelementen wie ListViewListView und TrackBar.

.NET 5.0 soll im November 2020 als gemeinsamer Nachfolger von .NET Framework, .NET Core und Mono erscheinen. Technisch basiert .NET 5.0 im Wesentlichen auf .NET Core. Derzeit gibt es die Preview 2-Version von .NET 5.0, die aber erst kleine Verbesserungen gegenüber .NET Core 3.1 zeigt. (rme)