Quando un utente fa clic sul mio pulsante di convalida (nel mio C#, WinForm, .net 3.5 app) Vorrei disegnare un bordo attorno a un determinato controllo se è vuoto. Dire una casella di testo che è denominato tbxLastName ho pensato che avevo bisogno di fare qualcosa di simile ->Disegna il bordo attorno a un controllo Button_Click
ControlPaint.DrawBorder(Graphics.FromHwnd(this.Handle),
tbxLastName.ClientRectangle, Color.Firebrick, ButtonBorderStyle.Solid);
Purtroppo, non ho idea di cosa mettere per l'oggetto Graphics come quello che ho non fa nulla.
Tutti gli esempi che ho trovato, MSDN - HERE, hanno questo codice in un evento Paint. In questo modo ->
private void panel1_Paint(object sender, PaintEventArgs e)
{
ControlPaint.DrawBorder(e.Graphics, this.panel1.ClientRectangle,
Color.DarkBlue, ButtonBorderStyle.Solid);
}
Io, invece, vogliono solo avere il bordo viene visualizzato durante certe condizioni si incontrano, che è ha dato il via da un Button_Click
Così molti dei suggerimenti suggeriamo di utilizzare un oggetto contenitore per contenere la casella di testo e chiamarla Paint_Event. Ho fatto questo e appare una scatola ma NON intorno al controllo. Appare nell'angolo in alto a sinistra del Controllo contenitore. Ecco quello che sto facendo ->
private void grpImmunizationCntrl_Paint(object sender, PaintEventArgs e)
{
if (lkuNOImmunizationReason.Text.Equals(string.Empty)
{
ControlPaint.DrawBorder(
e.Graphics, lkuNOImmunizationReason.ClientRectangle,
Color.Firebrick, ButtonBorderStyle.Solid);
}
}
EDIT
Questo è ciò che mi si avvicinò con la combinazione suggerimenti qui con ciò che ha funzionato per me.
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);
}
}
}
}
Io chiamo questo dal Paint_Event
di qualsiasi contenitore ne ho bisogno.
La grafica è l'equivalente di un DC Win32. http://msdn.microsoft.com/en-us/library/dd162467(VS.85).aspx –