这很奇怪。当我在按钮的绘画事件中执行此操作时:
using (LinearGradientBrush brush = new LinearGradientBrush(button1.ClientRectangle,
Color.Orange,
Color.Red,
90F))
{
e.Graphics.FillRectangle(brush, this.ClientRectangle);
}
按钮的文字消失。我怎样才能收回文字?
答案 0 :(得分:2)
您基本上是在控件的顶部。您应该尝试对按钮进行子类化并覆盖OnPaintBackground
以在文本后面进行绘制。
答案 1 :(得分:0)
为什么不设置按钮的背景画笔?
答案 2 :(得分:0)
button1.Invalidate()
。这将重绘文本...和整个按钮。DrawString
。答案 3 :(得分:0)
如果您不想使用background属性或覆盖OnPaintBackground方法,则可以执行以下操作:
//您的背景绘画代码
public void DrawText(Graphics g, Rectangle bounds, string text, Font font, Brush brush)
{
float x = bounds.Width / 2;
float y = bounds.Height /2;
SizeF textSize = g.MeasureString(text, font);
x = (x - (textSize.Width / 2) + bounds.X);
y = (x - (textSize.Height / 2) + bounds.Y);
g.DrawString(text, font, brush, new PointF(x, y));
}
并像这样使用
DrawText(g, button1.ClientRectangle, button1.Text, button1.Font, new SolidBrush(button1.ForeColor));
这些都没有实际测试过,但是你们是啊......
编辑:如果你选择走这条路线,你必须记住,当控件调整大小时,需要重新绘制控件。