Ir al contenido principal

Entradas

Formulario MDI (Evitar maximizado en cascada)

Bien!, como lo dice el titulo, todos los que trabajamos en .NET ya sabemos de antemano que cuando utilizamos un formulario MDI todos los formularios hijos cuando uno esta maximizado todos los demás se maximizan sin importar que tengan desactivado el botón de maximizar o que le hayamos indicado una valor al valor máximo de maximizado, Al MDIClient no le importa, si uno esta maximizado, todos se maximizaran. bien!, la idea de este articulo es cambiar la funcionalidad del control MDIClient para que esto no suceda, ya que suele ser molesto y hace que no queramos trabajar con formularios MDI. así que si estas interesado en saber como cambiar esta funcionalidad, no dejes de estar pendiente de este articulo.
Entradas recientes

Nullable DateTimePicker (DateEditPicker)

Bueno, luego de haberme ausentado tanto de mi blog y no es que lo haya abandonado o haya dejado de programar, solo que he estado ocupado en otras cosas personales. Bien, recientemente desarrollando una aplicación para un cliente me toco enfrentarme de frente con un campo fecha nulo, por la forma en que se desarrollo el proyecto y las necesidades del cliente tuve que dejar con valores nulos la fecha de nacimiento de los clientes, luego al iniciar a desarrollar la parte que corresponde a los clientes me vi en la necesidad de adaptar el control DateTimePicker para poder usarlo con fechas nulas, para no hacer muy largo el cuento, como hacemos todos los programadores para evitar la fatiga comense a googlear pero no me gustaron las opciones que encontré; entonces adapte un control para tal propósito, pero luego me vi en la necesidad de hacer que dicho control ademas de fecha también pudiera capturar la hora, pero como era un control hechizo no se podía, así que me tome mi tiempo para po

TextBox con Icon/Imagen

Bien, continuando con este articulo: TextBox con borde personalizado , ahora le dare la funcionalidad de poder mostrar un icono o imagen dentro del Control TextBox. Existen dos maneras de hacer esto: Pintar el icono/imagen dentro del control o Pintar el icono/imagen dentro del Non-Client Area del control. Pintar el icono/imagen dentro del control. Antes de escribir el código decidi googlear un poco, para ver si alguien más ya habia tenido la misma idea de usar el mensaje EM_SETMARGINS para dejar el espacio necesario para pintar el icono o imagen ya sea a la derecha o izquierda y me he encontrado con este articulo. Adding an Icon or Control to a TextBox or ComboBox . Pintar el icono/imagen de ntro del Non-Client Area del control. Us ando el Non- Client Area no encontre resultados googleando, así que es la forma que usar e para dib ujar un icono o imagen dentro de un control TextBox. En el control TextEditor que escrib í, utilizo esta manera para pintar el icono

TextBox con Borde Personalizado

Bien, retomando nuevamente mi blog, luego de tanto tiempo ausente, veremos como personalizar el borde del control TextBox con un color diferente. hace poco vi en los foros de MSDN, en el foro de VB.Net esta pregunta, ¿ Cómo puedo cambiar el color del borde de un control TextBox ?, anteriormente también se hizo la misma pregunta en este mismo foro donde yo respondí como hacerlo VB2010 4.0 - Como crear un textbox personalizado . no hay manera fácil de personalizar un control, generalmente se tiene que sobre escribir el evento WndProc para escuchar los mensajes de window y reemplazar la funcionalidad de estos según sea la necesidad o el control. bien, para cambiar el color del borde del control TextBox sin mucha funcionalidad, se debe de escuchar y reemplazar el funcionamiento de los mensajes WM_PAINT y WM_NCPAINT . ¿ Porque WM_PAINT ?, porque cuando cambiamos la propiedad BorderStyle de este control a FixedSingle, quien pinta el borde es el mensaje WM_PAINT no asi el WM_NC

DataGridViewTextEditorColumn (IV Parte)

Ahora veremos la clase DataGridViewTextEditorCell, esta clase como ya había comentado al inicio de este articulo, hereda de DataGridViewTextBoxCell, esta clase se encargara de pintar los botones e interactuar con los eventos del ratón ( Mouse ). no publicare mucho código de esta clase, solo mostrare y explicare los eventos y métodos principales. en esta clase he sobre escrito el evento Paint(), veamos el código:   protected override void Paint ( Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts ) { RepositoryButtonCollection btnCollection = null; if (this.columnButtons.ContainsKey(this.RowIndex)) btnCollection = this.columnButtons[this.RowIndex] as RepositoryButtonCollection;

DataGridViewTextEditorColumn (III Parte)

Continuando con el articulo, ahora veremos la clase DataGridViewTextEditorColumn, esta clase hereda de DataGridViewColumn y le he agregado dos propiedades para nuestro propósito  ShowButtonMode y ColumnEditor, esta ultima propiedad es del tipo RepositoryTextEditor . Los valores para ShowButtonMode son: Always : Indica que los botones de la celda siempre estaran visibles. FocusedRow : Indica que los botones solo se mostraran en la fila activa en el momento. FocusedCell : Indica que los botones solo se mostraran en la celda activa en el momento. Veamos el código:   [ToolboxBitmap(typeof(System.Windows.Forms.TextBox))] public class DataGridViewTextEditorColumn : DataGridViewColumn { private ShowButtonMode showButtonMode; private RepositoryTextEditor repositoryTextEditor; private IDesignerHost IDesignerHost { get { return this.DataGridView.Site.GetService(typeof(IDesignerHost)) as IDesignerHost; } } // Crea el

DataGridViewTextEditorColumn (II Parte)

Bien, continuando con el articulo.... la primera clase que veremos sera RepositoryTextEditor, este heredara de Component ya que no tendrá una UI que interactue con el usuario.   [ToolboxBitmap(typeof(System.Windows.Forms.TextBox))] [DesignerSerializer(typeof(RepositoryButtonSerializer), typeof(CodeDomSerializer))] public class RepositoryTextEditor : Component { private string name; private bool allowWhiteSpace; private HorizontalAlignment textAlign; private CharacterCasing characterCasing; private TextEditor.MaskType maskType; private RepositoryButtonCollection buttons; private static readonly object buttonClick; internal System.Windows.Forms.DataGridView DataGridViewOwner { get; set; } public delegate void RepositoryButtonPressEventHandler(object sender, RepositoryButtonArgs args); public event RepositoryButtonPressEventHandler ButtonClick { add { base.Events.AddHandler(buttonClick, value); } re