1

マウスがボタンに入るたびにボタンに描画したい。ボタンのテキストの後ろに長方形を描画したい。私はそれに描くために次のコードを持っています:

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);
}

カスタムボタンを作成せずにそれが可能であるかどうか、私はそれをどのように行うのか疑問に思いました。

誰かが提案/解決策を持っているならば、ここにそれらを投稿してください。

ありがとう!

4

1 に答える 1

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);
        }
    }
}
于 2012-05-06T07:42:39.887 に答える