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

A PHP Error was encountered

Severity: Core Warning

Message: Module 'timezonedb' already loaded

Filename: Unknown

Line Number: 0

Backtrace: