2010-11-25 5 views
6

Ich suchte nach einem Dialog mit einem Kontrollkästchen "Don 's zeigen mir diesen Dialog wieder" in C#.Suche nach einem eleganten Dialog "Zeige mir diesen Dialog nicht mehr" in C#

Ich googelte und suchte viel, aber ich konnte einfach keine elegante Lösung finden.

Der Dialog sollte so ähnlich wie die native MessageBox.Show funktionieren, aber mit einem neuen Eigenschaftswert (bool value) zum Aufrufer zurückkehren.

Danke.

Antwort

6

Vista und Windows 7-Anwendungen können die neuen TaskDialog-Funktionen verwenden, die die Standard-MessageBoxen so erweitern, dass sie ein Kontrollkästchen unten unterstützen (zusammen mit allen anderen Extras wie Befehlsverknüpfungen, benutzerdefinierten Schaltflächen, Fußzeilen usw.).

alt text

Leider von C# müssen Sie einige Interop, dies zu tun zuzugreifen. Wenn Sie möchten, dass die erweiterten TaskDialogs nur auf Vista/Windows 7 ausgerichtet sind, verwenden Sie den WindowsAPICodePack von http://code.msdn.microsoft.com/WindowsAPICodePack, der die Interop-Komplexität für Sie bewältigen kann.

Wenn Sie XP unterstützen müssen, gibt es eine ausgezeichnete Wrapper, der die nativen TaskDialogs auf Vista/7 mit einem WinForms Rückfall für XP hier unterstützt: http://www.codeproject.com/KB/vista/Vista_TaskDialog_Wrapper.aspx

+0

http://www.codeproject.com/KB/vista/Vista_TaskDialog_Wrapper.aspx funktioniert fantastisch. Ich habe auf Win7 und WinXP getestet. Vielen Dank. –

+0

Oups, toter Link: / –

3

Warum erstellen Sie nicht Ihr eigenes. Es ist sehr einfach. Einfach von System.Windows.Forms.Form Klasse ableiten und es wie die gewünschte nachahmen.

+1

Es ist nicht so einfach, wie das, was ich dachte. MessageBox hat verschiedene Schaltflächenauswahl und Symbolauswahl, und ich brauche sie auch. Wenn ich von MessageBox ableiten könnte, wird es so gut. aber wir können MessageBox nicht ableiten, da es keinen geschützten oder öffentlichen Konstruktor gibt. –

+0

@Peter Lee - Ich hatte ein ähnliches Problem in Java. Die Standardbibliothek bietet all diese schönen standardmäßigen Meldungsdialogfelder, aber sobald Sie den Dialog überhaupt anpassen möchten, verlieren Sie die gesamte Standardbreite/-höhe, Symbolressourcen, Schaltflächenanordnung, Schaltflächenbreiten, Fensterränder usw. I Ich musste in die Low-Level-Eingeweide hineinschauen, wie Java seine Dialoge konstruiert, um sicherzustellen, dass meine benutzerdefinierten Dialoge dem Standarddialog des Dialogs folgten. Es machte keinen Spaß, und es ließ mich eine standardisierte Art und Weise, dies zu tun. Zumindest der GUI-Designer von Visual Studio enthält einige gute Standardeinstellungen. –

+0

@Peter Lee: Es ist * möglich *, alle möglichen Stile zu duplizieren, die die Standard-MessageBox in Ihrem eigenen benutzerdefinierten Dialog zur Verfügung stellt. Es ist mehr Arbeit, aber es ist etwas, das Sie wieder und wieder verwenden können. Dieses Beispiel (das einen TaskDialog im Vista-Stil erstellt, in dem es unter früheren Versionen des Betriebssystems nicht verfügbar ist) ist ein großartiges Beispiel dafür, wie Sie dies tun können: http://www.codeproject.com/KB/vb/vdialog.aspx –

0

Ich glaube nicht, dass es eine fertige Lösung als solche geben wird. Zum Implementieren von "Nicht mehr anzeigen" müssen Sie die Informationen außerhalb des Tages aufbewahren und ein Benutzerprofil erstellen.

Wenn Ihre Infrastruktur persistent das Benutzerprofil vorhanden ist, können Sie einfach eine Klasse ähnlich der Klasse messagebox erstellen. Sie können jedoch nicht von messagebox ableiten.

+0

"Nicht mehr anzeigen" oder nicht, ich habe es in den Settings.settings gespeichert. –

+0

Sie müssen also ein eigenes Dialogfeld erstellen. – Kangkan