在文本 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);
}
我想知道如何做到这一点,如果可以在不制作自定义按钮的情况下做到这一点。
如果有人有任何建议/解决方案,请在此处发布。
谢谢!
我认为最简单的方法是创建一个自定义按钮,并覆盖其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);
}
}
}