Benutzer mit den meisten Antworten
Enumerationswerte für MessageBox

Frage
Antworten
-
Hallo StudioM,
dazu solltest Du aber nicht mit Zahlen operieren, sondern direkt mit den Enumerationen arbeiten.
Mit allem anderen führst Du schnell die Hintertür ein, was ich mit dem fehlerhaften Wert gezeigt habe.
Willst Du Dir den Aufruf vereinfachen erstelle Dir eine Klasse mit den typischen Meldungsvarianten,
und verwende diese. Ganz grob runtergetippt als Vorlage:
Public Class MessageService Const ApplicationName As String = "Meine Anwendung" Public Shared Sub InfoMessage(ByVal message As String) MessageBox.Show(message, ApplicationName, MessageBoxButtons.OK, MessageBoxIcon.Information) End Sub Public Shared Sub InfoMessage(ByVal message As String, ByVal form As Form) MessageBox.Show(message, form.Text, MessageBoxButtons.OK, MessageBoxIcon.Information) End Sub Public Shared Sub ErrorMessage(ByVal message As String, ByVal form As Form) MessageBox.Show(message, form.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) End Sub Public Shared Sub ErrorMessage(ByVal exception As Exception, ByVal form As Form) MessageBox.Show(exception.Message, form.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) End Sub Public Shared Function Question(ByVal message As String, ByVal form As Form) As DialogResult Return MessageBox.Show(message, form.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question) End Function End Class
Gruß Elmar
- Als Antwort vorgeschlagen Elmar Boye Samstag, 22. August 2009 14:09
- Als Antwort markiert Robert Breitenhofer Montag, 24. August 2009 13:34
Alle Antworten
-
Hallo StudioM,
wenn Du ihre ganzahlligen Werte sehen willst, findest Du sie am schnellsten im Objekt-Browser (STRG+W, J)
bzw via Kontextmenü auf einer Enumeration -> Gehe zu Definition.
Dort werden sie unten im Detailbereich neben den jeweiligen Symbolen angezeigt.
Brauchen tust Du sie aber im Regelfall nie.
Denn eine Enumeration ist nichts weiter als eine aufgemöbelte Ganzzahl (je nach Genauigkeit Byte..UInteger).
Und so kannst Du sie jederzeit umwandeln:
Dim buttons As MessageBoxButtons = MessageBoxButtons.OKCancel Dim integerValue As Integer integerValue = CType(buttons, Integer) Console.WriteLine("{0} => {1}", buttons, integerValue) integerValue = 3 buttons = CType(integerValue, MessageBoxButtons) Console.WriteLine("{0} => {1}", buttons, integerValue)
Wobei man dabei sehr aufpassen muß:
' Nicht definiert integerValue = -1 buttons = CType(integerValue, MessageBoxButtons) Console.WriteLine("{0} => {1}", buttons, integerValue)
Und deswegen Werte, die von extern kommen, immer prüfen sollte:
' Testen ob ein gültiger Wert If Not [Enum].IsDefined(GetType(MessageBoxButtons), integerValue) Then Console.WriteLine("Ungültiger Wert für MessageBoxButton: {0}", integerValue) End If
Sytem.Enum kennt einige weitere hilfreiche Methode, mit denen man auch einen Zeichen umwandeln kann uam.
' Mehrere gleiche Bezeichnungen für einen Wert Dim icon As MessageBoxIcon = CType([Enum].Parse(GetType(MessageBoxIcon), "Stop"), MessageBoxIcon) Console.WriteLine("Stop wird zu Hand: {0}", icon)
wobei hier am Ende Hand herauskommt, weil bei MessageBoxIcon mehrere Namen für gleiche Werte existieren.
Für Enumerationen, die aus dem Windows API stammen - wie hier von MessageBox - sind die Werte identisch.
Und so kannst Du sie auch bei Interop Aufrufen (DllImport, Declare) verwenden.
Gruß Elmar
-
Hallo Elmar,
vielen Dank für Deine Antwort. Das hilft mir schon für mein Verständnis.
Die Werte für MessageBoxButtons, MessageBoxIcon und MessageBoxDefaultButton benötige ich deshalb, weil ich die MessageBox in Abhängigkeit von Variablen in ihrer Erscheinung während der Laufzeit öfter ändern möchte.
Gruß StudioM -
Hallo StudioM,
dazu solltest Du aber nicht mit Zahlen operieren, sondern direkt mit den Enumerationen arbeiten.
Mit allem anderen führst Du schnell die Hintertür ein, was ich mit dem fehlerhaften Wert gezeigt habe.
Willst Du Dir den Aufruf vereinfachen erstelle Dir eine Klasse mit den typischen Meldungsvarianten,
und verwende diese. Ganz grob runtergetippt als Vorlage:
Public Class MessageService Const ApplicationName As String = "Meine Anwendung" Public Shared Sub InfoMessage(ByVal message As String) MessageBox.Show(message, ApplicationName, MessageBoxButtons.OK, MessageBoxIcon.Information) End Sub Public Shared Sub InfoMessage(ByVal message As String, ByVal form As Form) MessageBox.Show(message, form.Text, MessageBoxButtons.OK, MessageBoxIcon.Information) End Sub Public Shared Sub ErrorMessage(ByVal message As String, ByVal form As Form) MessageBox.Show(message, form.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) End Sub Public Shared Sub ErrorMessage(ByVal exception As Exception, ByVal form As Form) MessageBox.Show(exception.Message, form.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) End Sub Public Shared Function Question(ByVal message As String, ByVal form As Form) As DialogResult Return MessageBox.Show(message, form.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question) End Function End Class
Gruß Elmar
- Als Antwort vorgeschlagen Elmar Boye Samstag, 22. August 2009 14:09
- Als Antwort markiert Robert Breitenhofer Montag, 24. August 2009 13:34