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.
Inhaltsverzeichnis
- 1 MsgBox vs. MessageBox.Show
- 2 MsgBox Syntax
- 3 Einfache Meldung
- 4 Ja/Nein-Bestätigung
- 5 Ja/Nein/Abbrechen
- 6 Alle Button-Stile
- 7 Alle Icon-Stile
- 8 Standard-Button ändern
- 9 Dieselben Beispiele mit MessageBox.Show
- 10 Wann was verwenden
- 11 Komplettes Beispiel: Speichern-vor-Schließen-Muster
- 12 Häufige Fehler
- 13 FAQ
- 14 Fazit
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)
| Aspekt | MsgBox | MessageBox.Show |
|---|---|---|
| Namespace | Microsoft.VisualBasic | System.Windows.Forms |
| In C# verfügbar | Nein (nur VB.NET) | Ja |
| Rückgabetyp | MsgBoxResult | DialogResult |
| Button/Icon-Enums | MsgBoxStyle (kombinierbar) | Getrennte Enums für Buttons und Icons |
| Parameter-Reihenfolge | Nachricht, Stil, Titel | Nachricht, 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
| MsgBoxStyle | Angezeigte Buttons | Mögliche Ergebnisse |
|---|---|---|
OKOnly (Standard) | OK | Ok |
OKCancel | OK, Abbrechen | Ok, Cancel |
YesNo | Ja, Nein | Yes, No |
YesNoCancel | Ja, Nein, Abbrechen | Yes, No, Cancel |
RetryCancel | Wiederholen, Abbrechen | Retry, Cancel |
AbortRetryIgnore | Abbrechen, Wiederholen, Ignorieren | Abort, Retry, Ignore |
Alle Icon-Stile
| MsgBoxStyle | Icon | Einsatz |
|---|---|---|
Information | Blauer Info-Kreis | Statusmeldungen, Bestätigungen |
Question | Blaues Fragezeichen | Ja/Nein-Abfragen |
Exclamation | Gelbes Warndreieck | Warnungen, ungespeicherte Änderungen |
Critical | Roter Fehlerkreis | Fehler, kritische Probleme |
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.
FAQ
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.
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.
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.
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.
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.