MessageBox Personalizado
Crea tus propios MessageBox con los botones que necesites!!!

Fecha: 17/Feb/2005 (15 de Febrero del 2005)
Autor: Angel Fernando Lubenov (angelfernando@gmail.com)

 


La idea del siguiente código es primero brindar una pequeña "messagebox" que nos muestre botones con un texto personalizado, dado que muchas veces nos encontramos en la necesidad de tener otros botones distintos a los que nos ofrece Windows con la MessageBox tradicional.
Tambien con esto pretendo mostrar las ventajas que brinda .NET al tener todo el manejo de interfaces graficas (Winforms) orientado a objetos, dado que aquí, sin tener previa idea de la cantidad de botones que usaremos, podemos manejar y crear el formulario muy intuitiva y fácilmente.
Un ejemplo de su uso sería:


dim frmMsgBx as new SuperMessageBox
dim strRetorno as string

frmMsgBx.AgregarTitulo("Elija una opcion")
frmMsgBx.AgregarBoton("Imprimir")
frmMsgBx.AgregarBoton("Guardar en archivo")
frmMsgBx.AgregarBoton("Cancelar")
frmMsgBx.AgregarMensaje("Que desea hacer?")

strRetorno = frmMsgBx.Mostrar()


Al invocar a Mostrar() aparecera el Messagebox con tres botones y nos retornará el texto del botón presionado, a su vez, para el que le resulte más cómodo, la clase está hecha de una forma que se le puede agregar fácilmente un metodo que reciva por ejemplo: eltitulo, el mensaje y un arreglo de botones... o tambien se la puede encapsular en otra clase... en fin la idea es darles una herramienta simple y versátil. Este es mi primer aporte a esta lista y espero que les sirva.

A continuación sigue código en Visual Basic.NET:

'_____________________________________________

Public Class SuperMessageBox
    Inherits System.Windows.Forms.Form

#Region " Código generado por el Diseñador de Windows Forms "

    Public Sub New()
        MyBase.New()

        'El Diseñador de Windows Forms requiere esta llamada.
        InitializeComponent()

        'Agregar cualquier inicialización después de la llamada a InitializeComponent()

    End Sub

    'Form reemplaza a Dispose para limpiar la lista de componentes.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Requerido por el Diseñador de Windows Forms
    Private components As System.ComponentModel.IContainer

    'NOTA: el Diseñador de Windows Forms requiere el siguiente procedimiento
    'Puede modificarse utilizando el Diseñador de Windows Forms. 
    'No lo modifique con el editor de código.
    Friend WithEvents lblMensaje As System.Windows.Forms.Label
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.lblMensaje = New System.Windows.Forms.Label
        Me.SuspendLayout()
        '
        'lblMensaje
        '
        Me.lblMensaje.Location = New System.Drawing.Point(7, 13)
        Me.lblMensaje.Name = "lblMensaje"
        Me.lblMensaje.Size = New System.Drawing.Size(427, 42)
        Me.lblMensaje.TabIndex = 0
        Me.lblMensaje.TextAlign = System.Drawing.ContentAlignment.TopCenter
        '
        'SuperMessageBox
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(442, 100)
        Me.ControlBox = False
        Me.Controls.Add(Me.lblMensaje)
        Me.MaximizeBox = False
        Me.MinimizeBox = False
        Me.Name = "SuperMessageBox"
        Me.ShowInTaskbar = False
        Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide
        Me.Text = "SuperMessageBox"
        Me.TopMost = True
        Me.ResumeLayout(False)

    End Sub

#End Region

    Dim mintAncho As Integer = 100
    Dim alstBotones As New ArrayList
    Dim mstrRetorno As String


    '''<summary> Agrega un titulo al formulario </summary>
    '''<param name="Cadena">El titulo a agregar</param>
    Public Sub AgregarTitulo(ByVal Cadena As String)
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        'Autor: angell
        'Fecha de Creación: 16/12/2004
        'Modificaciones:
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        '                DESCRIPCION DE LAS VARIABLES LOCALES
        '    (agregar nombre de variables y su descripción) 
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

        Me.Text = Cadena
    End Sub

    '''<summary> Agrega un boton al formulario </summary>
    '''<param name="Cadena">El titulo del boton</param>
    Public Sub AgregarBoton(ByVal Cadena As String)
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        'Autor: angell
        'Fecha de Creación: 16/12/2004
        'Modificaciones:
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        '                DESCRIPCION DE LAS VARIABLES LOCALES
        '    (agregar nombre de variables y su descripción) 
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


        Dim cmdBoton As New System.Windows.Forms.Button

        cmdBoton.Text = Cadena
        cmdBoton.Height = 30 : cmdBoton.Width = mintAncho
        alstBotones.Add(cmdBoton)
    End Sub

    '''<summary> Agrega un mensaje al Formulario </summary>
    '''<param name="cadena">El texto del mensaje</param>
    Public Sub AgregarMensaje(ByVal cadena As String)
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        'Autor: angell
        'Fecha de Creación: 16/12/2004
        'Modificaciones:
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        '                DESCRIPCION DE LAS VARIABLES LOCALES
        '    (agregar nombre de variables y su descripción) 
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

        lblMensaje.Text = cadena
    End Sub

    '''<summary> Diseña el MessageBox </summary>
    '''<returns> Devuelve el campo TEXT del botón presionado</returns>
    Public Function Mostrar() As String
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        'Autor: angell
        'Fecha de Creación: 16/12/2004
        'Modificaciones:
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        '                DESCRIPCION DE LAS VARIABLES LOCALES
        '   cmdBoton        : un objeto boton temporal
        '   intContador     : la cantidad de botones del formulario
        '   intLargo        : la suma del largo de todos los botones mas sus espacios
        '   intI            : contador para el FOR-NEXT
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

        Dim cmdBoton As System.Windows.Forms.Button
        Dim intContador As Integer = alstBotones.Count
        Dim intLargo As Integer = intContador * (mintAncho + 10)
        Dim intI As Integer

        'seteamos el largo del formulario + 50 unidades
        Me.Width = intLargo + 50
        'seteamos el largo de la etiqueta del formulario
        Me.lblMensaje.Width = intLargo
        'centramos la etiqueta haciendola comensar en la posicion 25 (pues se agrego 50, 25 de cada lado al formulario)
        lblMensaje.Left = 25

        'para cada boton del arraylist, iteramos y lo agregamos al formulario 
        'asignándole el evento EVENTOCLICK que cargara en la variable
        'de retorno el contenido del campo TEXT del botón
        For intI = 0 To intContador - 1
            cmdBoton = CType(alstBotones(intI), Button)
            'situamos la posicion del boton en base a su orden
            cmdBoton.Location = New System.Drawing.Point((mintAncho + 10) * intI + 25, 60)

            'agregamos el controlador del evento click al boton
            AddHandler cmdBoton.Click, AddressOf EventoClick

            'seteamos al formulario como padre del control.
            Me.Controls.Add(cmdBoton)
        Next

        'centramos en la pantalla el formulario
        Me.CenterToScreen()
        'lo mostramos y esperamos hasta que se haya presionado un boton 
        'evento que cerrará el formulario
        Me.ShowDialog()

        'retornamos el valor de la variable de retorno
        Return mstrRetorno
    End Function

    '''<sumary>El evento que controla el click de los botones </sumary>
    Private Sub EventoClick(ByVal Sender As System.Object, ByVal e As EventArgs)
        mstrRetorno = CType(Sender, Button).Text
        Me.Close()
    End Sub

End Class

 


Espacios de nombres usados en el código de este artículo:

 


ir al índice