VB.NET MsgBox – Meldungsdialoge einfach erklärt (2026)

Die VB.NET MsgBox-Funktion zeigt eine Meldung an und gibt zurück, welchen Button der Benutzer geklickt hat. Sie eignet sich für schnelle Hinweise, Bestätigungen und Ja/Nein-Abfragen. Dieser Guide behandelt Syntax, Button-Kombinationen, Icons, Rückgabewerte, den Unterschied zwischen MsgBox und MessageBox.Show und wann du was verwenden solltest.

.NET-Hilfe gesucht?

Du baust eine Desktop-Anwendung?

Ich entwickle seit über 17 Jahren professionell in VB.NET und C#. Von Meldungsdialogen bis zur kompletten WinForms-Anwendung kann ich helfen.

MsgBox vs. MessageBox.Show

VB.NET bietet zwei Wege, eine Meldung anzuzeigen. Beide öffnen denselben Windows-Dialog, unterscheiden sich aber in Herkunft und API-Stil:

' VB.NET-Stil (aus Microsoft.VisualBasic Namespace)
MsgBox("Datei gespeichert.", MsgBoxStyle.Information, "Erfolg")

' .NET Framework-Stil (aus System.Windows.Forms)
MessageBox.Show("Datei gespeichert.", "Erfolg", MessageBoxButtons.OK, MessageBoxIcon.Information)
AspektMsgBoxMessageBox.Show
NamespaceMicrosoft.VisualBasicSystem.Windows.Forms
In C# verfügbarNein (nur VB.NET)Ja
RückgabetypMsgBoxResultDialogResult
Button/Icon-EnumsMsgBoxStyle (kombinierbar)Getrennte Enums für Buttons und Icons
Parameter-ReihenfolgeNachricht, Stil, TitelNachricht, Titel, Buttons, Icon

MsgBox ist ein VB.NET-Wrapper um die Win32-MessageBox-API. MessageBox.Show ist die .NET-Framework-Klasse, die in allen .NET-Sprachen funktioniert. Beide erzeugen exakt dasselbe Dialog-Fenster. Wenn dein Projekt rein VB.NET ist, funktioniert beides. Wenn du Code mit C#-Entwicklern teilst oder .NET-Konventionen folgst, ist MessageBox.Show die bessere Wahl.

MsgBox Syntax

Dim result As MsgBoxResult = MsgBox(
    Prompt,            ' Der Nachrichtentext (erforderlich)
    Buttons Or Icon,   ' MsgBoxStyle-Flags (optional)
    Title              ' Fenstertitel (optional)
)

Der erste Parameter ist die Nachricht. Der zweite kombiniert Button- und Icon-Stile mit Or. Der dritte setzt den Fenstertitel. Nur der erste Parameter ist erforderlich.

Einfache Meldung

Die einfachste MsgBox mit nur einer Nachricht und dem Standard-OK-Button:

MsgBox("Die Datei wurde gespeichert.")

Mit Titel und Informations-Icon:

MsgBox("Die Datei wurde gespeichert.", MsgBoxStyle.Information, "Erfolg")

Ja/Nein-Bestätigung

Dem Benutzer eine Ja/Nein-Frage stellen und auf die Antwort reagieren:

Dim result = MsgBox(
    "Möchtest du diesen Datensatz löschen?",
    MsgBoxStyle.YesNo Or MsgBoxStyle.Question,
    "Löschen bestätigen")

If result = MsgBoxResult.Yes Then
    DeleteRecord()
End If

Kombiniere Button-Stil und Icon-Stil mit Or. Der Rückgabewert sagt dir, welcher Button geklickt wurde.

Ja/Nein/Abbrechen

Für ungespeicherte Änderungen drei Optionen anbieten:

Dim result = MsgBox(
    "Du hast ungespeicherte Änderungen. Vor dem Schließen speichern?",
    MsgBoxStyle.YesNoCancel Or MsgBoxStyle.Exclamation,
    "Ungespeicherte Änderungen")

Select Case result
    Case MsgBoxResult.Yes
        SaveDocument()
        Me.Close()
    Case MsgBoxResult.No
        Me.Close()
    Case MsgBoxResult.Cancel
        ' Nichts tun, auf dem Form bleiben
End Select

Alle Button-Stile

MsgBoxStyleAngezeigte ButtonsMögliche Ergebnisse
OKOnly (Standard)OKOk
OKCancelOK, AbbrechenOk, Cancel
YesNoJa, NeinYes, No
YesNoCancelJa, Nein, AbbrechenYes, No, Cancel
RetryCancelWiederholen, AbbrechenRetry, Cancel
AbortRetryIgnoreAbbrechen, Wiederholen, IgnorierenAbort, Retry, Ignore

Alle Icon-Stile

MsgBoxStyleIconEinsatz
InformationBlauer Info-KreisStatusmeldungen, Bestätigungen
QuestionBlaues FragezeichenJa/Nein-Abfragen
ExclamationGelbes WarndreieckWarnungen, ungespeicherte Änderungen
CriticalRoter FehlerkreisFehler, kritische Probleme
Projekt in Planung?

Brauchst du eine fertige WinForms-Anwendung?

Von Meldungsdialogen bis zur kompletten datengetriebenen Desktop-App: Ich entwerfe Software, die hält. Lass uns über dein Projekt sprechen.

Standard-Button ändern

Standardmäßig ist der erste Button fokussiert. Du kannst das ändern, um versehentliche Klicks auf destruktive Aktionen zu vermeiden:

' "Nein" standardmäßig fokussieren, damit nicht versehentlich gelöscht wird
Dim result = MsgBox(
    "Alle Datensätze endgültig löschen?",
    MsgBoxStyle.YesNo Or MsgBoxStyle.Critical Or MsgBoxStyle.DefaultButton2,
    "Warnung")

If result = MsgBoxResult.Yes Then
    DeleteAllRecords()
End If

DefaultButton2 fokussiert den zweiten Button (Nein). Verwende DefaultButton3 für den dritten Button bei Drei-Button-Dialogen.

Dieselben Beispiele mit MessageBox.Show

Hier die gleichen Muster mit der .NET-Variante MessageBox.Show zum Vergleichen:

' Einfache Meldung
MessageBox.Show("Die Datei wurde gespeichert.", "Erfolg",
    MessageBoxButtons.OK, MessageBoxIcon.Information)

' Ja/Nein-Bestätigung
Dim result As DialogResult = MessageBox.Show(
    "Möchtest du diesen Datensatz löschen?", "Löschen bestätigen",
    MessageBoxButtons.YesNo, MessageBoxIcon.Question)

If result = DialogResult.Yes Then
    DeleteRecord()
End If

' Ja/Nein/Abbrechen mit Standard-Button
Dim result2 As DialogResult = MessageBox.Show(
    "Vor dem Schließen speichern?", "Ungespeicherte Änderungen",
    MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning,
    MessageBoxDefaultButton.Button2)

Select Case result2
    Case DialogResult.Yes
        SaveDocument()
        Me.Close()
    Case DialogResult.No
        Me.Close()
    Case DialogResult.Cancel
        ' Auf dem Form bleiben
End Select

Die Funktion ist identisch. MessageBox.Show verwendet getrennte Enums (MessageBoxButtons, MessageBoxIcon, MessageBoxDefaultButton) statt Flags mit Or zu kombinieren. Der Rückgabetyp ist DialogResult statt MsgBoxResult.

Wann was verwenden

Verwende MsgBox, wenn:

  • Dein Projekt rein VB.NET ist und du kürzere Syntax bevorzugst
  • Du schnell prototypen willst und minimalen Code brauchst

Verwende MessageBox.Show, wenn:

  • Deine Codebasis mit C#-Entwicklern geteilt wird
  • Du .NET-Konventionen folgen willst
  • Du den Owner-Window-Parameter brauchst (um den Dialog über einem bestimmten Form zu halten)
  • Dein Code portierbar zu .NET 5+ / .NET 8+ Projekten sein soll

Komplettes Beispiel: Speichern-vor-Schließen-Muster

Ein realistisches Beispiel, das vor dem Schließen eines Forms zum Speichern auffordert. Dieses Muster funktioniert in jedem Texteditor, Dateneingabe-Form oder Einstellungsfenster:

Private _hasChanges As Boolean = False

Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    _hasChanges = True
End Sub

Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
    If Not _hasChanges Then Return

    Dim result = MsgBox(
        "Du hast ungespeicherte Änderungen. Jetzt speichern?",
        MsgBoxStyle.YesNoCancel Or MsgBoxStyle.Exclamation Or MsgBoxStyle.DefaultButton1,
        "Ungespeicherte Änderungen")

    Select Case result
        Case MsgBoxResult.Yes
            SaveToFile()
        Case MsgBoxResult.Cancel
            e.Cancel = True  ' Schließen verhindern
    End Select
End Sub

Private Sub SaveToFile()
    File.WriteAllText("data.txt", TextBox1.Text, Encoding.UTF8)
    _hasChanges = False
End Sub

Mit e.Cancel = True im FormClosing-Event wird das Schließen des Forms verhindert. Der Benutzer bleibt auf dem Form und kann weiter arbeiten. Mehr zum Schreiben von Dateien findest du im VB.NET Textdatei schreiben Guide.

Häufige Fehler

Rückgabewert ignorieren

' SCHLECHT - fragt Ja/Nein, ignoriert aber die Antwort
MsgBox("Löschen?", MsgBoxStyle.YesNo)
DeleteRecord()

' GUT - prüfen, welcher Button geklickt wurde
If MsgBox("Löschen?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then
    DeleteRecord()
End If

MsgBox mit VBScript-MsgBox verwechseln

Die VB.NET-MsgBox-Funktion lebt in Microsoft.VisualBasic.Interaction und gibt MsgBoxResult zurück. Die VBScript-MsgBox gibt ganzzahlige Werte zurück (1 für OK, 6 für Ja, usw.). Sie sehen ähnlich aus, laufen aber in komplett unterschiedlichen Umgebungen. In VB.NET immer gegen das MsgBoxResult-Enum vergleichen, nie gegen Magic Numbers.

MsgBox in einem Hintergrund-Thread verwenden

Sowohl MsgBox als auch MessageBox.Show müssen vom UI-Thread aus aufgerufen werden. Wenn du sie aus einem Hintergrund-Thread oder Task aufrufst, kann der Dialog hinter anderen Fenstern erscheinen oder Cross-Thread-Exceptions auslösen. Verwende Me.Invoke(), um den Aufruf auf den UI-Thread zu marshallen.

Interessiert?

Erfahrenen .NET-Entwickler gesucht?

Ich übernehme dein Projekt, von Benutzerdialogen bis zur fertigen Desktop-Anwendung. Schreib mir einfach eine Nachricht.

FAQ

Was ist der Unterschied zwischen MsgBox und MessageBox.Show?

MsgBox ist eine VB.NET-Komfortfunktion aus dem Microsoft.VisualBasic-Namespace. MessageBox.Show ist die .NET-Framework-Klasse aus System.Windows.Forms. Beide erzeugen denselben Dialog. MsgBox gibt MsgBoxResult zurück, MessageBox.Show gibt DialogResult zurück.

Wie zeige ich eine Ja/Nein-MsgBox in VB.NET?

Verwende MsgBox("Deine Frage", MsgBoxStyle.YesNo) und vergleiche das Ergebnis mit MsgBoxResult.Yes oder MsgBoxResult.No. Füge Or MsgBoxStyle.Question hinzu für ein Fragezeichen-Icon.

Wie ändere ich den Standard-Button in MsgBox?

Füge MsgBoxStyle.DefaultButton2 oder DefaultButton3 zum Stil-Parameter hinzu. Das verschiebt den initialen Fokus auf den zweiten bzw. dritten Button und verhindert versehentliche Klicks auf destruktive Aktionen.

Ist VB.NET MsgBox dasselbe wie VBScript MsgBox?

Nein. VB.NET MsgBox gibt ein typisiertes MsgBoxResult-Enum zurück. VBScript MsgBox gibt ganzzahlige Konstanten zurück (1 für OK, 6 für Ja, usw.). Sie sehen ähnlich aus, laufen aber in komplett unterschiedlichen Umgebungen.

Kann ich MsgBox in einem Hintergrund-Thread verwenden?

Nicht direkt. Sowohl MsgBox als auch MessageBox.Show sollten vom UI-Thread aufgerufen werden. Aus einem Hintergrund-Thread verwende Me.Invoke(), um den Aufruf auf den UI-Thread zu marshallen.

Fazit

Die MsgBox-Funktion gibt dir schnelle Meldungsdialoge mit einer Zeile Code. Kombiniere Button- und Icon-Stile mit Or, prüfe immer den Rückgabewert bei Ja/Nein-Abfragen und verwende DefaultButton2 vor destruktiven Aktionen. Wenn du .NET-Standardcode bevorzugst, nutze MessageBox.Show mit getrennten Enums für dasselbe Ergebnis. Für dynamisches Event-Handling schau dir den VB.NET AddHandler Guide an. Zum Schreiben von Dateien nach einem Speichern-Dialog siehe den VB.NET Textdatei schreiben Guide.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Robert Skibbe
Datenschutz-Übersicht

Diese Website verwendet Cookies, damit wir dir die bestmögliche Benutzererfahrung bieten können. Cookie-Informationen werden in deinem Browser gespeichert und führen Funktionen aus, wie das Wiedererkennen von dir, wenn du auf unsere Website zurückkehrst, und hilft unserem Team zu verstehen, welche Abschnitte der Website für dich am interessantesten und nützlichsten sind.