Skip to main content

El control MessageBox

El control MessageBox és una eina fonamental en VB.NET per mostrar missatges, advertències o sol·licitar una confirmació simple a l'usuari. No és pròpiament un "objecte de diàleg comú" com OpenFileDialog, sinó una classe estàtica (o mètode estàtic) que mostra un quadre de missatge modal.

Funcionament MessageBox

El MessageBox s'utilitza principalment mitjançant el seu mètode estàtic Show, la qual cosa significa que no cal crear-ne una instància (amb Dim ... As New). Simplement l'invoques directament des de la classe MessageBox.

La funció principal del MessageBox.Show() és mostrar un missatge i esperar la interacció de l'usuari. Quan es mostra, atura l'execució del codi en segon pla (és modal) fins que l'usuari fa clic a un botó.

 

Mètode: MessageBox.Show()

El mètode Show té diverses sobrecàrregues (diferents maneres d'invocar-lo) que permeten personalitzar el missatge. La sintaxi més completa i útil té quatre arguments:

Fragmento de código
MessageBox.Show(text, caption, buttons, icon)
Argument Tipus Descripció
text String El missatge principal que es mostra a l'usuari.
caption String El text que apareix a la barra de títol del quadre de missatge.
buttons MessageBoxButtons Especifica quins botons (p. ex., OK, Yes/No, Abort/Retry/Ignore) es mostren.
icon MessageBoxIcon Especifica la icona que es mostra (p. ex., Error, Question, Information).

Propietats i exemples 

Els arguments buttons i icon són els que defineixen l'aspecte i la funcionalitat del quadre de missatge.

 

Argument MessageBoxButtons (Botons)

Aquest argument defineix els conjunts de botons que l'usuari pot clicar. El valor de retorn de MessageBox.Show() és sempre un DialogResult, que t'indica quin botó ha premut l'usuari.

Constant Botons Retorn del DialogResult
OK OK DialogResult.OK
OKCancel OK, Cancel DialogResult.OK o DialogResult.Cancel
YesNo Yes, No DialogResult.Yes o DialogResult.No
YesNoCancel Yes, No, Cancel DialogResult.Yes, DialogResult.No, o DialogResult.Cancel

 

Exemple d'ús dels botons (YesNo)

Fragmento de código
Private Sub btnEliminar_Click(sender As Object, e As EventArgs) Handles btnEliminar.Click
    Dim resultat As DialogResult

    ' Mostra el diàleg YesNo i guarda la resposta
    resultat = MessageBox.Show( _
        "Esteu segur que voleu eliminar aquest registre?", _
        "Confirmació d'Eliminació", _
        MessageBoxButtons.YesNo, _
        MessageBoxIcon.Warning)

    ' Comprova el resultat per executar una acció
    If resultat = DialogResult.Yes Then
        ' Codi per eliminar el registre
        MessageBox.Show("Registre eliminat.")
    Else
        MessageBox.Show("Operació cancel·lada.")
    End If
End Sub

 

Argument MessageBoxIcon (Icona)

Aquest argument estableix una icona visual que ajuda l'usuari a entendre ràpidament la naturalesa del missatge (error, informació, pregunta, etc.).

Constant Descripció Ús Comú
Information Una 'i' en un cercle. Informació o actualització amb èxit.
Error Una 'x' en un cercle vermell. Missatge d'error crític.
Warning Un triangle amb un signe d'exclamació. Advertència sobre una acció que pot tenir conseqüències.
Question Un signe d'interrogació. Sol·licita una decisió de l'usuari (sovint amb YesNo).

 

Exemple icona (Error)

Fragmento de código
' En una secció Try/Catch on es produeix un error
Catch ex As Exception
    MessageBox.Show( _
        "No s'ha pogut connectar a la base de dades." & vbCrLf & "Detall: " & ex.Message, _
        "Error de Connexió", _
        MessageBoxButtons.OK, _
        MessageBoxIcon.Error)
End Try

 

Argument MessageBoxDefaultButton (Botó per Defecte)

Aquest argument opcional especifica quin botó del quadre de missatge ha de tenir el focus per defecte (el que es premerà si l'usuari prem Enter). Això millora l'accessibilitat i la velocitat d'interacció.

Constant Descripció
Button1 El primer botó (l'esquerre) tindrà el focus.
Button2 El segon botó tindrà el focus.
Button3 El tercer botó tindrà el focus.

 

Exemple amb botó per defecte

En un diàleg YesNo, volem que No sigui l'opció per defecte per evitar eliminacions accidentals:

Fragmento de código
Private Sub btnOpcióPerDefecte_Click(sender As Object, e As EventArgs) Handles btnOpcióPerDefecte.Click
    ' Yes és el Botó 1, No és el Botó 2. Volem que No (Botó 2) sigui el focus per defecte.
    Dim resultat As DialogResult = MessageBox.Show( _
        "Desa els canvis abans de sortir?", _
        "Desar", _
        MessageBoxButtons.YesNoCancel, _
        MessageBoxIcon.Question, _
        MessageBoxDefaultButton.Button2) ' <- Aquesta línia ho defineix
    
    If resultat = DialogResult.Yes Then
        ' Codi per desar
    ElseIf resultat = DialogResult.No Then
        ' Codi per sortir sense desar
    ' En cas de Cancel, no cal fer res
    End If
End Sub