0

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

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

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

4

4 回答 4

2

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

于 2013-02-21T14:43:49.217 回答
0

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

于 2013-02-21T14:44:28.643 回答
0
  1. 打电话button1.Invalidate()。这将重绘文本...和整个按钮。
  2. 以前的建议可能不会产生您想要的结果。由于您决定自己绘制按钮,因此您还将负责在背景上绘制文本,请参阅DrawString
于 2013-02-21T14:45:48.443 回答
0

如果您不想使用背景属性或重写 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));

None of this is actually tested though sooooo yeaaaa....

EDIT: If you choose to go this route, you will have to keep in mind that when the control is resized, it would require a repaint of the control.

于 2013-02-21T15:00:24.790 回答