MessageBox Personalizado Fecha: 17/Feb/2005 (15 de Febrero del 2005)
|
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: