miércoles, 25 de enero de 2012

NetBarControl - Description Item Style (New)




  Mejoras.
  • Permite mostrar una descripción sobre el Item, permitiendo cambiar el tipo de fuente y el color de la fuente. La imagen usada para este estilo sera la asignada a la propiedad "LargeImagen" la cual se mostrara de izquierda a derecha.
  • Uso de la rueda del raton (Mouse Wheel) para probocar el movimiento de desplazamiento arriba/abajo.
Descargar

¿Como implementar esta nueva versión?
Simple, solo tienes que reemplazar el archivo "NetBarControl.dll" actual por este nuevo, recompilar tu projecto y listo.
¿Como seleccionar este nuevo estilo para un grupo?
Solo debes de seleccionar el grupo al cual le quieres cambiar el estilo y establecer la propiedad "Style = DescriptionItemList"


y como siempre.... no olviden dejar sus comentarios y cualquier problema no duden en hacermelo saber para hacer las correpciones del caso.

Salu2,


Actualizaciones:


29 Sep 2012 - Download

Correpciones:
  1. Se corrigieron los dos problemas reportados por Jose Luis, 1) Error al collapsar el control y error al reducir el tamaño del control a un tamaño muy mínimo.
  2. Se corrigió el error reportado por ElPes al momento de agregar un grupo en tiempo de ejecución cuando este control no tiene grupos previamente definidos en tiempo de diseño.

lunes, 2 de enero de 2012

Personalizar DataGridView (III) - Cambiar Diseñador.

Articulos anteriores:
Personalizar DataGridView (I) - Pintar área vacía.
Personalizar DataGridView (II) - Bloquear columnas de solo lectura.
Personalizar DataGridView (II.1) - Saltar columna usando un metodo.

Como ya hemos visto en los artículos anteriores sobre este mismo tema, ahora lo que haré es modificar el diseñador de este control.

¿Con que objetivo?
Bien... este es un control que se suele usar mucho en los desarrollos, para mostrar muchos registros de forma vertical, pero en lo personal, cuando tengo más de 6 columnas en este control y necesito modificar una o dos columnas, cualquiera de sus propiedades, se me olvida que no puedo con un simple "click" sobre el encabezado de la columna seleccionar esta para poderla modificar, para esto tengo que usar el editor de la colección "Columns", que no digo que este mal.

pero!!!!... porque este control no implementa esta funcionalidad que vendría a ser de mucha utilidad, bueno!!!!... desde mi punto de vista.

veamos un posible caso de tantos.

Caso #1:
Tienes este control con unas 15 columnas y necesitas modificar el ancho de la columna 10 y no la puedes ver porque en el diseñador solo puedes ver las primeras 8 columnas, tienes que buscar la propiedad "Columns" para abrir su editor para poder modificar esta propiedad.

si pudieras usar la barra de desplazamiento en tiempo de diseño y solo seleccionar la columna que queremos como si fuera otro control más, seria mucho mejor este control, o ¿Me equivoco? controles de terceros lo pueden hacer, no mencionare ninguno.

Pero, gracias Microsoft por haber creado este control tan potente y flexible, y proveernos las clases necesarias para poder cambiar la funcionalidad de este control.

Así es, le daremos esta funcionalidad a nuestro control que hemos estado personalizando.

Para esto reemplazare el diseñador del control.

[C#]
 
[Designer(typeof(MEPDataGridViewDesigner), typeof(IDesigner))]
public class MEPDataGridView : DataGridView
{
}
 
internal class MEPDataGridViewDesigner : ControlDesigner
{
}
 
Al cambiar el diseñador del control nos vemos obligados a proveer un nuevo "Smart Tag".




como podemos notar en la imagen, ademas hemos agregado dos propiedades más al "Smart Tag", "Fill Empty Area" y "Enable Focus Read-Only Columns", propiedades que hemos agregado a nuestro control en los artículos anteriores.

bien, para implementar nuestra nueva funcionalidad al control he sobre escrito el metodo "WndProc" de la clase "ControlDesigner" para escuchar los mensajes "WM_RBUTTONDOWN", "WM_LBUTTONDOWN", "WM_LBUTTONUP" y "WM_RBUTTONUP", este ultimo con la idea de mostrar un menú contextual con la opción para borrar la columna al presionar el botón derecho de ratón (Mouse) sobre esta. Tal como se muestra en la siguiente imagen.


[C#]
 
internal class MEPDataGridViewDesigner : ControlDesigner
{
    [PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
    protected override void WndProc(ref Message m)
    {
        switch (m.Msg)
        {
            case NativeMethods.WM_RBUTTONDOWN:
            case NativeMethods.WM_LBUTTONDOWN:
                this.WmLButtonDown(ref m);
                return;
            case NativeMethods.WM_RBUTTONUP:
                this.WmRButtonUp(ref m);
                return;
            case NativeMethods.WM_LBUTTONUP:
                this.WmLButtonUp(ref m);
                return;
        }
        base.WndProc(ref m);
    }
}
 

como también el método "OnSetCursor" y para activar la barra de desplazamiento horizontal en tiempo de diseño he sobre escrito la función "GetHitTest"

[C#]
 
internal class MEPDataGridViewDesigner : ControlDesigner

    protected override void OnSetCursor()
    {
        Point point = this.Owner.PointToClient(Control.MousePosition);
        int columnIndex = this.GetColumnIndexByPoint(point);
        if (columnIndex > -1)
            Cursor.Current = Cursors.Default;
        else
            base.OnSetCursor();
    }
    protected override bool GetHitTest(Point point)
    {
        return this.IsOverHScrollBar(point);
    }
}
 
Dando como resultado un control "DataGridView" personalizado con la funcionalidad de poder seleccionar las columnas en tiempo de diseño para poder cambiar sus propiedades o eliminar sin necesidad de usar el editor de la colección de columnas.




Descargar:
Codigo Fuente [C#]
Codigo Fuente [VB.NET] (Pendiente)

bien!!!... espero les sea de utilidad y no olviden dejar sus comentarios.


Salu2,