Archivo de la categoría: 2017

TextBox personalizado (TextBoxUniversal)


El control TextBoxUniversal se creo con la finalidad de validar las entradas de información a los controles TextBox, el cual tiene la particularidad de validar números, letras, decimales. Y nos evita estar creando rutinas de código para hacer las validaciones antes mencionadas, ya que el control TextBoxUniversal lo hace por nosotros. También tiene una propiedad WaterMarkText.

Para poder implementarlo hay que descargar el proyecto que esta hospedado en GitHub TextBox-ComboBox una vez descargado el proyecto agregaremos la carpeta Libreria a muestro proyecto la cual contiene la dll GlobalTech.TextBoxControl.dll

Sigamos los siguientes pasos:

  • Agregamos la carpeta Librería a nuestro proyecto a nivel de solución

textbox

  • Nos dirigimos al Explorardor de soluciones para agregar la dll al proyecto, haga click derecho sobre el proyecto> Agregar> Referencia, se abrira la siguiente ventana.

Examinar

  • Presiona el botón Examinar como muestra la imagen y le das la ruta donde esta la carpeta Librería  y seleccionas la dll GlobalTech.TextBoxControl.dll
  • Ahora nos dirigimos a la ventana ToolBox(Cuadro de Herramientas) ,

agregar

  • Seleccionamos la pestaña General click derecho> Agregar pestaña le ponemos un nombre a la nueva pestaña como MyControlesPersonalizados.

elegir

  • Le saldrá la siguiente ventana.

examinar2

  • Le da en el botón Examinar como muestro en la imagen  a partir de ahí le da la ruta donde se encuentra la dll que esta contenida en la carpeta Librería.
  • Le da en el botón Aceptar y ya tendría los nuevos controles en la nueva pestaña creada, tal como muestro en la siguiente imagen.

textboxuniversal

Si todo ha salido bien hasta acá ya tendríamos los nuevos controles personalizado en nuestro Cuadro de Herramientas listo para ser usados.

Pasemos a hablar de las nuevas propiedades del control TextBoxUniversal

  • NúmeroDecimales, esta propiedad permite mostrar la cantidad de decimales que debe tener un número.
  • TipoControl, esta propiedad permite validar la información ingresada al control TextBoxUniversal si es de tipo númerico, letras, decimales.
  • WaterMarkText, esta propiedad permite ingresar un texto al control para indicarle al usuario algún mensaje como Nuevo el cual desaparecera al ingresar datos.

TipoControl pasamos a describir sus opciones.

Enteros,  Permite ingresar solo números, no va a permitir ingresar otro caracter que no sea números.

Letras, Permite ingresar solo letras.
Númeric, Permite ingresar solo números y al pasar al siguiene control le agrega los decimales, el cual se puede manejar la cantidad de decimales con una propiedad que se le agrego al control de nombre NumeroDecimales en el cual usted ingresa la cantidad de decimales que desee agregar.

TextBoxUniversal

Espero la información brindada sea de utilidad.

Anuncios

Comunicar Formularios usando Easy.MessageHub

 

Easy.MessageHub es un framework que por dentro viene implementado el patrón Event Aggregator, que justamente basandose en eventos permite una comunicación desacoplada entre formularios sin relación directa en nuestra aplicación.

EventAggregator: Por el nombre es fácil decir que los agregados de eventos un Publisher/Subscriber trabajan con EventAggregator como un centro cuya tarea consiste en agregar todos los mensajes publicados y enviar el mensaje a los suscriptores interesados.

EventAggregator

Antes de comenzar hay que instalar Easy.MessageHub ejecutar el siguiente comando en la consola de administación de paquetes.

Install-Package Easy.MessageHub

Una vez instalado pasamos a crear una clase como contrato para dichos eventos.

 public class VariableSelected
      {
          public int Codigo { get; set; }
          public string StrValor { get; set; }
      }
Desde el formulario hijo implementamos MessageHub
public partial class FrmBusqueda : Form
    {

        private readonly IMessageHub _eventHub;

        public FrmBusqueda(string title, EnumAsignacionTablas t)
        {
            _titulo = title;
            _table = t;
            CompleteEvent.Complete += CompleteEvent_Complete;
            InitializeComponent();
        }

        public FrmBusqueda(string title, EnumAsignacionTablas t, IMessageHub evenHub)
            : this(title, t)
        {
            _eventHub = evenHub;
        }

	private void ObtenerId()
        {
            if (dgvBusqueda.Rows.Count > 0)
            {
                if (dgvBusqueda.CurrentRow != null)
                {
                    _idRow = Convert.ToInt32(dgvBusqueda.CurrentRow.Cells[0].Value);
                    _desRow = Convert.ToString(dgvBusqueda.CurrentRow.Cells[1].Value);
                }
                _eventHub.Publish(new VariableSelected {Codigo = _idRow, StrValor = _desRow});
            }
        }
El padre recibe los datos y los procesa
private void btnBuscarColor_Click(object sender, EventArgs e)
         {
             var argNombreEntidad = new ConstructorArgument("title", StrColour.NameEntity);
             var argT = new ConstructorArgument("t", EnumAsignacionTablas.Colour);
             var frm = CompositionRoot.Resolve<FrmBusqueda>(argNombreEntidad, argT);
             _eventHub.Subscribe<VariableSelected>(OnColorSelected);
             frm.ShowDialog();
         }

        private void OnColorSelected(VariableSelected colorEvent)
         {
             if (colorEvent.Codigo != 0 && !string.IsNullOrEmpty(colorEvent.StrValor))
             {
                 if (DetalleItemColour.Count != 1)
                 {
                     var entity = new Colour()
                     {
                         ColourId = colorEvent.Codigo,
                         Nombre = colorEvent.StrValor
                     };
                     _detalleColour.Add(entity);
                     dgvColor.AutoGenerateColumns = false;
                     dgvColor.DataSource = DetalleItemColour;

                     //De suscribir
                     _eventHub.ClearSubscriptions();
                 }
                 else
                 {
                     MessageBoxEx.EnableGlass = false;
                     MessageBoxEx.Show(this, "Solo se permite un solo Color", StrColour.NameEntity,
                         MessageBoxButtons.OK, MessageBoxIcon.Information);
                     vBool = false;
                     colorEvent.Codigo = 0;
                     colorEvent.StrValor = String.Empty;
                 }
             }
         }