사용자가 내 유효성 검사 단추 (내 C#, WinForm, .net 3.5 응용 프로그램)를 클릭하면 특정 컨트롤 주위에 테두리가 그려지기를 원합니다. >컨트롤 주위에 테두리 그리기 Button_Click
ControlPaint.DrawBorder(Graphics.FromHwnd(this.Handle),
tbxLastName.ClientRectangle, Color.Firebrick, ButtonBorderStyle.Solid);
불행하게도, 나는 그래픽은 내가 아무것도하지 않는 무엇을 같은 개체에 대한 넣어 무슨 생각이 없다 - 나는 이런 식으로 뭔가를 할 필요가 생각 tbxLastName라는 텍스트 상자는 말.
나는 그림판 이벤트에서이 코드를 가지고있는 MSDN - HERE의 모든 예제를 보았습니다. 그래서처럼 ->
private void panel1_Paint(object sender, PaintEventArgs e)
{
ControlPaint.DrawBorder(e.Graphics, this.panel1.ClientRectangle,
Color.DarkBlue, ButtonBorderStyle.Solid);
}
그러나 나는 특정 조건이 Button_Click
제안의 그래서 많은 사람들이 사용하는 것이 좋습니다 a로 쫓겨되어 대회를하는 동안 나타나는 경계를 갖고 싶어 container 객체를 사용하여 텍스트 상자를 잡고 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);
}
}
편집
이 내가 나를 위해 일한 것을 여기 제안을 결합 해낸 것입니다.
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
에서 호출합니다.
그래픽은 Win32 DC와 동일합니다. http://msdn.microsoft.com/en-us/library/dd162467(VS.85).aspx –