Genesis Vargas J

Como crear tu propio MessageBox personalizado en Visual Basic .NET

Comparte:

Hola que tal amigos, esta vez les traigo un tutorial interesante si eres de esos que te gusta hacer tus programas con diseños personalizados con Windows Forms. Si alguna vez hiciste un programa sin bordes y con estilos y diseños personalizados y te has visto obligado a usar mensajes para mostrar una advertencia o mostrar un mensaje para recibir una opción y de acuerdo a la selección de ésta hacer una acción podrás ver que el cámino mas fácil fue utilizar el MessageBox por default que trae .NET sabiendo que tu programa super personalizado se vera "arruinado" por ese estilo que trae el mensaje.


Para lograr esto crearemos un proyecto de Visual Basic .NET con windows forms y haremos dos formularios: 1 principal y uno que "emulara" el MessageBox, al final quedaría así:



El código de nuestro formulario que trbdra e mensaje personalizado sería sí:


FRMMENSAJE.VB


Public Class FrmMensaje

Shared IdBoton As Integer
Shared nuevoMessageBox As FrmMensaje

//funcion para mostrar el mensaje con el parametro solo de texto
Public Overloads Function Show(ByVal texto As String) As Integer
nuevoMessageBox = New FrmMensaje()
nuevoMessageBox.LblMensaje.Text = texto
nuevoMessageBox.ShowDialog()
Return IdBoton
End Function

//funcion para mostrar el mensaje con el parametro solo de texto y parametro de que boton especifico (1=aceptar, 2=cancelar)
Public Overloads Function Show(ByVal texto As String, ByVal boton As Integer) As Integer
nuevoMessageBox = New FrmMensaje()
nuevoMessageBox.LblMensaje.Text = texto
If boton = 1 Then
nuevoMessageBox.BtnOk.Location = New Point(313, 138)
nuevoMessageBox.BtnCancelar.Visible = False
ElseIf boton = 2 Then
nuevoMessageBox.BtnOk.Visible = False
End If
nuevoMessageBox.ShowDialog()
Return IdBoton
End Function

//funcion para mostrar el mensaje con el parametro solo de texto, color de fondo y color de letra
Public Overloads Function Show(ByVal texto As String, ByVal fondo As Color, ByVal colorletra As Color) As Integer
nuevoMessageBox = New FrmMensaje()
nuevoMessageBox.LblMensaje.Text = texto
nuevoMessageBox.BackColor = fondo
nuevoMessageBox.ForeColor = colorletra
nuevoMessageBox.ShowDialog()
Return IdBoton
End Function

//funcion para mostrar el mensaje con el parametro solo de texto, parametro de que boton especifico (1=aceptar, 2=cancelar), color de fondo y color de letra
Public Overloads Function Show(ByVal texto As String, ByVal boton As Integer, ByVal fondo As Color, ByVal colorletra As Color) As Integer
nuevoMessageBox = New FrmMensaje()
nuevoMessageBox.LblMensaje.Text = texto
If boton = 1 Then
nuevoMessageBox.BtnOk.Location = New Point(313, 165)
nuevoMessageBox.BtnCancelar.Visible = False
ElseIf boton = 2 Then
nuevoMessageBox.BtnOk.Visible = False
End If
nuevoMessageBox.BackColor = fondo
nuevoMessageBox.ForeColor = colorletra
nuevoMessageBox.ShowDialog()
Return IdBoton
End Function

//metodo que va a devolver que boton se hizo click y luego destruir el formulario-mensaje
Private Sub BtnOk_Click(sender As Object, e As EventArgs) Handles BtnOk.Click
IdBoton = 1
nuevoMessageBox.Dispose()
End Sub

//metodo que va a devolver que boton se hizo click y luego destruir el formulario-mensaje
Private Sub BtnCancelar_Click(sender As Object, e As EventArgs) Handles BtnCancelar.Click
IdBoton = 2
nuevoMessageBox.Dispose()
End Sub

End Class


Como podemos ver el código es muy sencillo: hemos creado dos variables estáticas (una para identificar el boton presionado y otra para identificar el mismo formulario), hemos creado una funcion sobrecargada llamada Show que se usa para mostrar el mensaje con ciertos parámetros: texto, color de fondo, color de fuente, botón a mostrar, etc.
Si analizamos el MessageBox por default éste utiliza también el polimorfismo que hemos implementado en este ejemplo (Polimorfismo es una característica principal de la POO donde permite usar un metodo/funcion sobrecargada), también hemos implementado en los métodos de click de cada botón asignarle el id para luego retornarlo en la función donde previamente creamos una instancia del formulario y accedmos a configurar los controles de este para posteriormente lanzarlo como un diálogo y retornar un identificador de que botón se hizo click.


FORM1.VB


Public Class Form1

Private Sub BtnMostrar_Click(sender As Object, e As EventArgs) Handles BtnMostrar.Click
//si la caja de texto no esta vacia = hay un texto que se mostrara en el mensaje
If TxtMensaje.TextLength > 0 Then
If FrmMensaje.Show(TxtMensaje.Text, TxtFondo.BackColor, TxtFuente.BackColor) = 1 Then
LblResult.Text = "Usted ha hecho click en el boton ok :)"
Else
LblResult.Text = "Usted ha hecho click en el boton cancelar :("
End If
Else
//aqui estoy mostrando el mensaje con solo un boton
FrmMensaje.Show("Por favor escriba un texto para mostrarlo en el mensaje :D", 1)
End If
End Sub

Private Sub BtnFuente_Click(sender As Object, e As EventArgs) Handles BtnFuente.Click
If ColorDialog1.ShowDialog <> Windows.Forms.DialogResult.Cancel Then
TxtFuente.BackColor = ColorDialog1.Color
Else
//aqui estoy mostrando el mensaje con solo un boton
FrmMensaje.Show("Por favor escoja un color :D", 1)
End If
End Sub

Private Sub BtnFondo_Click(sender As Object, e As EventArgs) Handles BtnFondo.Click
If ColorDialog1.ShowDialog <> Windows.Forms.DialogResult.Cancel Then
TxtFondo.BackColor = ColorDialog1.Color
Else
//aqui estoy mostrando el mensaje con solo un boton
FrmMensaje.Show("Por favor escoja un color :D", 1)
End If
End Sub
End Class


En este formulario principal observamos que cuando se hace click en el botón para mostrar el mensaje personalizado le pasamos 3 párametros: el texto que escrimos en la caja de texto y que mostraremos en el mensaje, los colores de fondo que escojamos para la fuente y para el fondo. Dependiendo del resultado que obtengamos de la función Show mostraremos en un label el bóton sobre el cual se hizo click. También podemos ver que esa misma función Show la llamamos para mostrar los mensaje cuando no escojemos un color y cuando no hemos escrito nada en la caja de texto pero esta vez la llamamos con 2 parámetros: el texto y el botón que solo se mostrará (1=aceptar y 2= cancelar) porque es un mensaje común y no uno donde se deba mostrar 2 opciones a escoger.



Bueno eso es todo espero que les sirva mucho para aprender y practicar. les dejo una carpeta comprimida para que descarguen el ejemplo.


Comentarios


genesis vargas

Soy Genesis Vargas Jiménez, autor de éste blog. Me gusta desarrollar software en todas las plataformas (web, móvil y desktop) y compartir conocimiento para ayudar a muchas personas.

Desde el 2015 soy MVP Microsoft en Visual Studio y tecnologías de desarrollo, reconocimiento que me enorgullece mucho.

MVP Genesis Vargas J