在文本 C# 后面的按钮上绘图

本文关键字:按钮 绘图 文本 | 更新日期: 2023-09-27 18:33:16

每当鼠标进入按钮时,我都想画到按钮上。我希望在按钮文本后面绘制矩形。我有以下代码可以绘制它:

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

我想知道如何做到这一点,如果可以在不制作自定义按钮的情况下做到这一点。

如果有人有任何建议/解决方案,请在此处发布。

谢谢!

在文本 C# 后面的按钮上绘图

我认为最简单的方法是创建一个自定义按钮,并覆盖其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);
        }
    }
}