绘制事件执行后,按钮文本消失

时间:2013-02-21 14:39:17

标签: c#

这很奇怪。当我在按钮的绘画事件中执行此操作时:

using (LinearGradientBrush brush = new LinearGradientBrush(button1.ClientRectangle,
                                                               Color.Orange,
                                                               Color.Red,
                                                               90F))
{
  e.Graphics.FillRectangle(brush, this.ClientRectangle);
}

按钮的文字消失。我怎样才能收回文字?

4 个答案:

答案 0 :(得分:2)

您基本上是在控件的顶部。您应该尝试对按钮进行子类化并覆盖OnPaintBackground以在文本后面进行绘制。

答案 1 :(得分:0)

为什么不设置按钮的背景画笔?

答案 2 :(得分:0)

  1. 致电button1.Invalidate()。这将重绘文本...和整个按钮。
  2. 以前的建议可能不会产生你想要的东西。由于您决定自己绘制按钮,因此您还需要负责在背景上绘制文本,请参阅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));

这些都没有实际测试过,但是你们是啊......

编辑:如果你选择走这条路线,你必须记住,当控件调整大小时,需要重新绘制控件。