2012-05-06 2 views
1

마우스가 입력 될 때마다 단추 위에 그려야합니다. 단추 텍스트 뒤에 사각형을 그려야합니다.텍스트 뒤의 단추에 그리기 C#

private void button1_MouseEnter(object sender, EventArgs e) 
{ 
    Graphics g = this.button1.CreateGraphics(); 
    LinearGradientBrush myBrush = new 
     LinearGradientBrush(
     this.button1.ClientRectangle, 
     Color.Red, 
     Color.AliceBlue, 
     LinearGradientMode.Horizontal 
    ); 
    g.FillRectangle(myBrush, this.button1.ClientRectangle); 
} 

나는 그것이 사용자 정의 버튼을하지 않고 할 수 있다면, 그것을 수행하는 방법 궁금 해서요 : 나는 그것에 그릴 다음과 같은 코드가 있습니다.

누구에게 제안이나 해결책이 있으면 여기에 게시하십시오.

감사합니다.

+0

모든 버튼에 동일한 것을 그리시겠습니까? 아니면 각 버튼마다 다른 것을 그려야할까요? – Ove

+0

나는 폼의 모든 버튼에 대해 같은 것을 그리기를 원합니다. – 3aw5TZetdf

+0

가장 쉬운 솔루션은'System.Windows.Forms.Button'에서 파생 된 사용자 정의 버튼 클래스를 만드는 것입니다. 왜 그 생각에 반대하는거야? – Ove

답변

2

가장 쉬운 방법은 사용자 지정 단추를 만들고 그림을 그리는 OnPaint 메서드를 재정의하는 것이라고 생각합니다. 그런 다음 Button을 소스 파일에서 CustomBtn으로 대체하고 새 버튼을 사용할 수 있습니다.

class CustomBtn : Button 
{ 
    private bool ShouldDraw = false; 
    private LinearGradientBrush myBrush = null; 

    protected override void OnMouseEnter(EventArgs e) 
    { 
     base.OnMouseEnter(e); 
     ShouldDraw = true; 
    } 

    protected override void OnMouseLeave(EventArgs e) 
    { 
     base.OnMouseLeave(e); 
     ShouldDraw = false; 
    } 

    protected override void OnPaint(PaintEventArgs pevent) 
    { 
     base.OnPaint(pevent); 
     if (ShouldDraw) 
     { 
      if (myBrush == null || (myBrush != null && myBrush.Rectangle != ClientRectangle)) 
      { 
       myBrush = new LinearGradientBrush(ClientRectangle, Color.Red, Color.AliceBlue, LinearGradientMode.Horizontal); 
      } 
      pevent.Graphics.FillRectangle(myBrush, ClientRectangle); 
      TextFormatFlags flags = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter | TextFormatFlags.WordBreak; 
      TextRenderer.DrawText(pevent.Graphics, Text, Font, ClientRectangle, ForeColor, flags); 
     } 
    } 
} 
+0

감사합니다. 신청서에 적용 해 드리겠습니다. – 3aw5TZetdf