Cuando un usuario hace clic en mi botón Validar (en mi aplicación C#, WinForm, .net 3.5) Me gustaría dibujar un borde alrededor de un cierto control si está vacío. Decir un cuadro de texto que se nombra tbxLastName pensé que tenía que hacer algo como esto ->Dibujar borde alrededor de un Control en Button_Click
ControlPaint.DrawBorder(Graphics.FromHwnd(this.Handle),
tbxLastName.ClientRectangle, Color.Firebrick, ButtonBorderStyle.Solid);
Por desgracia, no tengo idea de qué poner a los objetos gráficos como lo que tengo no hace nada.
Todos los ejemplos que he encontrado, MSDN - HERE, tienen este código en un evento de pintura. Al igual que ->
private void panel1_Paint(object sender, PaintEventArgs e)
{
ControlPaint.DrawBorder(e.Graphics, this.panel1.ClientRectangle,
Color.DarkBlue, ButtonBorderStyle.Solid);
}
que, sin embargo, sólo quieren tener la frontera aparece mientras se reúnen ciertas condiciones son que se inició por una Button_Click
Así que muchas de las sugerencias sugerir el uso de una contenedor para mantener el cuadro de texto y llamarlo Paint_Event. Hice esto y aparece una caja pero NO alrededor del control. Aparece en la esquina superior izquierda del control de contenedores. Aquí es lo que estoy haciendo ->
private void grpImmunizationCntrl_Paint(object sender, PaintEventArgs e)
{
if (lkuNOImmunizationReason.Text.Equals(string.Empty)
{
ControlPaint.DrawBorder(
e.Graphics, lkuNOImmunizationReason.ClientRectangle,
Color.Firebrick, ButtonBorderStyle.Solid);
}
}
EDITAR
Esto es lo que ocurrió con la combinación de sugerencias aquí con lo que funcionó para mí.
public static void HighlightRequiredFields(Control container, Graphics graphics, Boolean isVisible)
{
Rectangle rect = default(Rectangle);
foreach (Control control in container.Controls)
{
if (control.Tag is string && control.Tag.ToString() == "required")
{
rect = control.Bounds;
rect.Inflate(3, 3);
if (isVisible && control.Text.Equals(string.Empty))
{
ControlPaint.DrawBorder(graphics, rect, Color.FromArgb(173,216,230), ButtonBorderStyle.Solid);
}
else
{
ControlPaint.DrawBorder(graphics, rect, container.BackColor, ButtonBorderStyle.None);
}
}
if (control.HasChildren)
{
foreach (Control ctrl in control.Controls)
{
HighlightRequiredFields(ctrl, graphics, isVisible);
}
}
}
}
Yo llamo a esto desde el Paint_Event
de algunos recipientes que necesito.
Gráficos es el equivalente de un Win32 DC. http://msdn.microsoft.com/en-us/library/dd162467(VS.85).aspx –