none
Enumerationswerte für MessageBox RRS feed

  • Frage

  • Hallo zusammen,

    ich suche bisher leider vergeblich nach den konkreten Enumerationswerten für MessageBoxButtons, MessageBoxIcon und MessageBoxDefaultButton der MessageBox-Klasse.
    Wo finde ich diese Werte?

    Danke im voraus

    StudioM
    Freitag, 21. August 2009 10:17

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

    Freitag, 21. August 2009 16:43

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



    Freitag, 21. August 2009 13:28
  • 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
    Freitag, 21. August 2009 14:43
  • 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

    Freitag, 21. August 2009 16:43
  • Hallo Elmar,

    vielen Dank dafür. So werde ich daran gehen.

    Gruß StudioM
    Samstag, 22. August 2009 11:36