Когда пользователь нажимает кнопку подтверждения ( в моем приложении C #, WinForm, .net 3.5 ), я хотел бы нарисовать границу вокруг определенного элемента управления, если он пуст. Скажем, текстовое поле с именем tbxLastName Я думал, что мне нужно сделать что-то вроде этого ->
ControlPaint.DrawBorder(Graphics.FromHwnd(this.Handle),
tbxLastName.ClientRectangle, Color.Firebrick, ButtonBorderStyle.Solid);
К сожалению, я понятия не имею, что поставить для графического объекта, поскольку то, что у меня есть, НИЧЕГО не делает.
Все примеры, с которыми я сталкивался, MSDN - ЗДЕСЬ , содержат этот код в событии рисования. Вот так ->
private void panel1_Paint(object sender, PaintEventArgs e)
{
ControlPaint.DrawBorder(e.Graphics, this.panel1.ClientRectangle,
Color.DarkBlue, ButtonBorderStyle.Solid);
}
Я, однако, хочу, чтобы граница отображалась только при соблюдении определенных условий, которые запускаются нажатием кнопки
Многие предложения предлагают использовать контейнерный объект для хранения текстового поля и вызова его Paint_Event. Я сделал это, и появляется окно, но НЕ вокруг элемента управления. Появляется в верхнем левом углу Контейнер Контроля. Вот что я делаю ->
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
Это то, что я придумал, сочетая здесь предложения с тем, что мне помогало.
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);
}
}
}
}
Я звоню из Paint_Event
любого Контейнера, который мне нужен.