Mit Vista fand ein Einzug neuer Dialogdesigns statt, welche auf langer Sicht die herkömmlichen Messageboxen ablösen werden. Leider finden sich im Framework diese Designs noch nicht. Möchte man auf diese zugreifen, so muss man dafür auf eine dll aus dem Vista SDK bzw. aus dem Windows API Code Pack zurückgreifen. Will man aber ohne eine weitere dll auskommen (z.B. in einem Klassenbibliothekprojekt), so lässt sich das ganze ebenfalls per API realisieren. Der API-Aufruf Private Declare Auto Function TaskDialog Lib "comctl32.dll" (ByVal ...) bietet uns die Möglichkeit, auf dieses Dialoge zuzugreifen. In diesem Beispiel liegt der Fokus auf die Dialoge mit dem Sicherheitsschild. Damit das ganze genauso bequem zu handhaben ist wie ein normaler Aufruf einer Messagebox, habe ich das ganze in eine Klasse mit dem Namen "MessageWindowDialog" verpackt. Mit der Methode Show wird der Dialog aufgerufen. Diese Methode ist überladen. Die auszuwählenden Button habe ich zu einem Enum mit dem Namen MessageWindowButton zusammengefasst. Die Iconauswahl geschieht ebenfalls über ein Enum. Dieses lautet MessageWindowIcon. Die Methode Show gibt ein Enum mit den Namen MessageWindowResult zurück, in welchem der vom Benutzer gewählte Button aufgeführt ist. Das aufrufende Formular wird wie folgt präpariert: Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load Me.Width = 300 Me.Height = 300 ' Button erstellen und auf dem Formular plazieren Dim btn As New Button With {.Text = "Demo"} AddHandler btn.Click, AddressOf ClickEvent btn.Top = (Me.Height - btn.Height) / 2 - (btn.Height / 2) btn.Left = (Me.Width - btn.Width) / 2 Me.Controls.Add(btn) End Sub ''' <summary> ''' Click Event des Buttons ''' </summary> ''' <param name="sender"></param> ''' <param name="e"></param> Private Sub ClickEvent(ByVal sender As System.Object, ByVal e As System.EventArgs) ' Die Parameter zum Dialogaufruf können einzeln oder ' als MessageWindowData Struktur übergeben werden. ' Aufgrund des Flagattributes können die gewünschten ' Buttons mit einer OR Verknüpfung ausgewählt werden. ' Unsere neuer Dialog Dim dialog As New MessageWindowDialog ' Teilt uns mit, welcher Button gedrückt wurde Dim result As MessageWindowDialog.MessageWindowResult ' Text vordefinieren, um die Aufrufbeispiele kompakter zu halten Dim WindowTitel As String = _ "Fensterüberschrift" Dim Instruction As String = _ "Hier findet sich die Anweisung" Dim Content As String = _ "An dieser Stelle kann weiterer Text angegeben werden" ' Anzeige aller Buttons. ' Der gewählte Button wird anschließend genannt result = dialog.Show(Me, "Alle Buttons", _ "Bitte einen Button auswählen", _ "Hier werden alle Button angezeigt", _ MessageWindowDialog.MessageWindowButton.OK Or _ MessageWindowDialog.MessageWindowButton.No Or _ MessageWindowDialog.MessageWindowButton.Cancel Or _ MessageWindowDialog.MessageWindowButton.Close Or _ MessageWindowDialog.MessageWindowButton.Retry Or _ MessageWindowDialog.MessageWindowButton.Yes, _ MessageWindowDialog.MessageWindowIcon.WithoutIcon) ' Gewählten Button durch eine Messagebox anzeigen UsedButton(result) ' Restliche Dialoge anzeigen dialog.Show(Me, WindowTitel, Instruction, Content, _ MessageWindowDialog.MessageWindowButton.OK, _ MessageWindowDialog.MessageWindowIcon.Error) dialog.Show(Me, WindowTitel, Instruction, Content, _ MessageWindowDialog.MessageWindowButton.OK, _ MessageWindowDialog.MessageWindowIcon.Information) dialog.Show(Me, WindowTitel, Instruction, Content, _ MessageWindowDialog.MessageWindowButton.OK, _ MessageWindowDialog.MessageWindowIcon.Question) dialog.Show(Me, WindowTitel, Instruction, Content, _ MessageWindowDialog.MessageWindowButton.OK, _ MessageWindowDialog.MessageWindowIcon.SecurityShield) dialog.Show(Me, WindowTitel, Instruction, Content, _ MessageWindowDialog.MessageWindowButton.OK, _ MessageWindowDialog.MessageWindowIcon.SecurityShieldBlue) dialog.Show(Me, WindowTitel, Instruction, Content, _ MessageWindowDialog.MessageWindowButton.OK, _ MessageWindowDialog.MessageWindowIcon.SecurityShieldError) dialog.Show(Me, WindowTitel, Instruction, Content, _ MessageWindowDialog.MessageWindowButton.OK, _ MessageWindowDialog.MessageWindowIcon.SecurityShieldGrey) dialog.Show(Me, WindowTitel, Instruction, Content, _ MessageWindowDialog.MessageWindowButton.OK, _ MessageWindowDialog.MessageWindowIcon.SecurityShieldSuccess) dialog.Show(Me, WindowTitel, Instruction, Content, _ MessageWindowDialog.MessageWindowButton.OK, _ MessageWindowDialog.MessageWindowIcon.SecurityShieldWarning) dialog.Show(Me, WindowTitel, Instruction, Content, _ MessageWindowDialog.MessageWindowButton.OK, _ MessageWindowDialog.MessageWindowIcon.Warning) End Sub ''' <summary> ''' Ruft ab, welcher Button gewählt wurde. ''' </summary> ''' <param name="r">MessageWindowDialog.MessageWindowResult</param> Private Sub UsedButton(ByVal r As MessageWindowDialog.MessageWindowResult) Select Case r Case MessageWindowDialog.MessageWindowResult.Cancel MessageBox.Show("Es wurde der Button " + """" + _ "Cancel" + """" + " gewählt", "Info", _ MessageBoxButtons.OK, MessageBoxIcon.Information) Case MessageWindowDialog.MessageWindowResult.Close MessageBox.Show("Es wurde der Button " + """" + _ "Close" + """" + " gewählt", "Info", _ MessageBoxButtons.OK, MessageBoxIcon.Information) Case MessageWindowDialog.MessageWindowResult.No MessageBox.Show("Es wurde der Button " + """" + _ "No" + """" + " gewählt", "Info", _ MessageBoxButtons.OK, MessageBoxIcon.Information) Case MessageWindowDialog.MessageWindowResult.None Case MessageWindowDialog.MessageWindowResult.OK MessageBox.Show("Es wurde der Button " + """" + _ "OK" + """" + " gewählt", "Info", _ MessageBoxButtons.OK, MessageBoxIcon.Information) Case MessageWindowDialog.MessageWindowResult.Retry MessageBox.Show("Es wurde der Button " + """" + _ "Retry" + """" + " gewählt", "Info", _ MessageBoxButtons.OK, MessageBoxIcon.Information) Case MessageWindowDialog.MessageWindowResult.Yes MessageBox.Show("Es wurde der Button " + """" + _ "Yes" + """" + " gewählt", "Info", _ MessageBoxButtons.OK, MessageBoxIcon.Information) End Select End Sub Kernstück des Ganzen bildet die Klasse MessageWindowDialog. ''' <summary> ''' Zeigt Messageboxen an, die ab Vista Einzug ins ''' Betriebssystem genommen haben. ''' </summary> Public Class MessageWindowDialog #Region "Deklarieren" ''' <summary> ''' Auswahl der Icons, die im MessageWindowDialog ''' angezeigt werden können. ''' </summary> Public Enum MessageWindowIcon WithoutIcon = 0 Information = UInt16.MaxValue - 2 Warning = UInt16.MaxValue [Error] = UInt16.MaxValue - 1 Question = 32514 SecurityShieldWarning = UInt16.MaxValue - 5 SecurityShieldError = UInt16.MaxValue - 6 SecurityShieldSuccess = UInt16.MaxValue - 7 SecurityShield = UInt16.MaxValue - 3 SecurityShieldBlue = UInt16.MaxValue - 4 SecurityShieldGrey = UInt16.MaxValue - 8 End Enum ''' <summary> ''' Vom User ausgewählten Button. ''' </summary> Public Enum MessageWindowResult None OK = 1 Cancel = 2 Yes = 6 No = 7 Retry = 4 Close = 8 End Enum ''' <summary> ''' Button, die dem MessageWindowDialog zur Verfügung stehen. ''' </summary> <Flags()> _ Public Enum MessageWindowButton OK = &H1 Cancel = &H8 Yes = &H2 No = &H4 Retry = &H10 Close = &H20 End Enum ''' <summary> ''' Nachrichteninhalt des MessageWindowDialoges. ''' </summary> Public Structure MessageWindowData ''' <summary> ''' Fenstertitel ''' </summary> Public WindowTitle As String ''' <summary> ''' Anweisung ''' </summary> Public Instruction As String ''' <summary> ''' Nachrichtentext ''' </summary> Public MessageContent As String ''' <summary> ''' Icon ''' </summary> Public Icon As MessageWindowIcon ''' <summary> ''' Anzuzeigende Buttons ''' </summary> Public Buttons As MessageWindowButton End Structure ' API Aufruf Private Declare Auto Function TaskDialog Lib "comctl32.dll" ( _ ByVal hWndParent As IntPtr, _ ByVal hInstance As IntPtr, _ ByVal WindowTitle As String, _ ByVal Instruction As String, _ ByVal MessageContent As String, _ ByVal CommonButtons As Integer, _ ByVal Icon As Integer, _ ByRef PushedButton As Integer) As Integer #End Region ''' <summary> ''' Zeigt eine Messagebox im Vista, Windows7 Stil an. ''' </summary> ''' <param name="Owner">Handle</param> ''' <param name="WindowsTitle">Überschrift im Formular</param> ''' <param name="Instruction">Anweisung</param> ''' <param name="Content">Inhaltsangabe</param> ''' <param name="Buttons">Anzuzeigende Buttons</param> ''' <param name="Icon">Auswahl des Icon</param> ''' <returns></returns> Public Function Show(ByVal Owner As IWin32Window, _ ByVal WindowsTitle As String, _ ByVal Instruction As String, _ ByVal Content As String, _ ByVal Buttons As MessageWindowButton, _ ByVal Icon As MessageWindowIcon) As MessageWindowResult Dim d As MessageWindowData d.Buttons = Buttons d.Icon = Icon d.Instruction = Instruction d.MessageContent = Content d.WindowTitle = WindowsTitle Return Me.Show(Owner, d) End Function ''' <summary> ''' Zeigt eine Messagebox im Vista, Windows7 Stil an. ''' </summary> ''' <param name="Owner">Handle</param> ''' <param name="Data">MessageWindowData Objekt</param> ''' <returns></returns> Public Function Show(ByVal Owner As IWin32Window, _ ByVal Data As MessageWindowData) As MessageWindowResult Dim a As Integer TaskDialog(Owner.Handle, IntPtr.Zero, Data.WindowTitle, _ Data.Instruction, Data.MessageContent, Data.Buttons, _ Data.Icon, a) ' Gedrückten Button bekannt geben Return GetResult(a) End Function ''' <summary> ''' Ruft ab, welcher Button gewählt wurde. ''' </summary> ''' <param name="a">Integer Wert</param> ''' <returns>MessageWindowResult</returns> Private Function GetResult(ByVal a As Integer) As MessageWindowResult Select Case a Case 1 Return MessageWindowResult.OK Exit Select Case 2 Return MessageWindowResult.Cancel Exit Select Case 4 Return MessageWindowResult.Retry Exit Select Case 6 Return MessageWindowResult.Yes Exit Select Case 7 Return MessageWindowResult.No Exit Select Case 8 Return MessageWindowResult.Close Case Else Return MessageWindowResult.None End Select End Function End Class Dieser Tipp wurde bereits 14.321 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats November 2024 Dieter Otter WAVE-Dateien aufnehmen Ein Code-Ausschnitt, mit dem sich WAVE-Dateien in verschiedenen Aufnahmequalitäten aufnehmen lassen. sevGraph (VB/VBA) Grafische Auswertungen Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |