Site logo
Site logo
Programmieren aus Leidenschaft
Programmieren aus Leidenschaft

TaskDialog


Als Programmierer ist man meistens froh, wenn man eine Anwendung nicht von Grund auf selbst entwickeln muss, sondern stattdessen auf vorgefertigte Bauteile aus dem Windows-Baukasten zugreifen kann. Eine nützliche Gruppe dieser Bausteine sind die Windowseigenen Dialogfenster wie die MessageBox oder der FileOpenDialog. Diese existieren auch im .NET Framework, um den Entwicklern das Leben einfacher zu machen und standardisierte Fenster für bestimmte Aufgaben anzubieten. Auch für den Benutzer sind solche Fenster von Vorteil, da er sich nicht für jedes Programm an unterschiedliche Fenster gewöhnen muss.
Obwohl es die bekannten Dialoge auch weiterhin, gibt sind sie doch in die Jahre gekommen. Windows 7 bietet moderner Varianten der Dialogfenster an, die zwar die gleichen Aufgaben erfüllen, aber vom Design besser aussehen und teilweise auch mehr Möglichkeiten bieten. An dieser Stelle werden Sie jetzt einige, aber bei weitem nicht alle, neuen Dialoge kennenlernen.
 
Auch die neuen Dialogfenster sind zwar Teil der erweitern WindowsAPI, aber noch nicht von .NET Anwendungen ansprechbar. Auch hier schlägt das API Code Pack eine Brücke.

Um die erweitern Fenster zu benutzen, benötigen Sie jetzt zwingend auch den Verweis auf die Anfangs erwähnte Microsoft.WindowsAPICodePack.dll. Ausserdem sollten Sie folgende Namespace Deklaration hinzufügen.
using Microsoft.WindowsAPICodePack.Dialogs;
Jetzt können Sie in einen TaskDialog instanzieren und konfigurieren.
TaskDialog td = new TaskDialog();
td.Icon = TaskDialogStandardIcon.Error;
td.Caption = "Die Überschrift";

td.InstructionText = "Wichtige Mitteilung";

td.StandardButtons = TaskDialogStandardButtons.Yes | TaskDialogStandardButtons.Cancel;

TaskDialogResult res = td.Show();
stacks_image_04F5CDBE-5C9F-45CF-9E1F-8BC1AC352EB1
Achtung! Eventuell bekommen Sie bei der Ausführung eine Fehlermeldung, die besagt, dass Sie nicht die Version 6 der Common Controls Bibliothek geladen haben. 

TaskDialog feature needs to load version 6 of comctl32.dll but a different version is current loaded in memory.
 
Diese Meldung bezieht sich auf die verwendet Version der Windows Steuerelemente Bibliothek. Die neuste Version wird nämlich nicht automatisch verwendet.
Alles, was man tun muss, ist die Anwendung anzuweisen, diese Bibliothek zu laden. Falls noch nicht vorhanden, fügen Sie die dem Projekt eine Manifestdatei hinzu, und erweitern Sie das Manifest um die folgende Abhängigkeit.
<</span>dependency>
        <</span>dependentAssembly>
                <</span>assemblyIdentity
                        type="win32"
                        name="Microsoft.Windows.Common-Controls"
                        version="6.0.0.0"
                        processorArchitecture="*"
                        publicKeyToken="6595b64144ccf1df"
                        language="*"/>
        </dependentAssembly>
</dependency>
Falls Sie weitere Informationen benötigen, finden Sie auch Manifeste in den Beispielen und Projekten des API Code Pack.  Dann steht der Verwendung des TaskDialogs nichts mehr im Weg.
 
Durch erweiterte Konfiguration können in diesem Dialogfenster sogar noch mehr Informationen angezeigt werden.
TaskDialog td = new TaskDialog();
td.Icon = TaskDialogStandardIcon.Error;
td.Caption = "Die Überschrift";
td.Text = "Hier ist Platz für Zusätzliche Informationen";
td.InstructionText = "Wichtige Mitteilung";
td.FooterText = "Kontaktieren Sie den Kundendienst";
td.FooterIcon =
TaskDialogStandardIcon.Information;
td.StandardButtons =
TaskDialogStandardButtons.Yes | TaskDialogStandardButtons.Cancel;
stacks_image_EE97BD03-3BD0-44C7-A848-51EA9E911058
Ein typischer Anwendungsfall ist es, den Benutzer zu fragen, ob er Meldungen dieser Art in Zukunft nicht mehr sehen möchte. Mit dem TaskDialog ist das sehr leicht möglich, denn er erlaubt es, eine CheckBox mit anzuzeigen.
TaskDialog td = new TaskDialog();
td.Icon = TaskDialogStandardIcon.Warning;
td.Caption = "Die Überschrift";
td.Text = "Wollen Sie die Daten wirklich löschen?";
td.InstructionText = "Wichtige Mitteilung";
td.FooterCheckBoxText = "Diese Fenster nicht wieder anzeigen";
td.FooterIcon = TaskDialogStandardIcon.Information;
td.StandardButtons =
TaskDialogStandardButtons.Yes | TaskDialogStandardButtons.No;

TaskDialogResult res = td.Show();

if (td.FooterCheckBoxChecked == true)
{

}
stacks_image_FDACA723-CBDF-4A8B-825E-4DD6D3597132