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
  1. コールしbutton1.Invalidate()ます。これにより、テキストとボタン全体が再描画されます。
  2. 以前のアドバイスは、あなたが望むものではないかもしれません。自分でボタンをペイントすることにしたので、背景の上にテキストを描画する必要もあります。 を参照してくださいDrawString
于 2013-02-21T14:45:48.443 に答える
0

ボタンの背景ブラシを設定しないのはなぜですか?

于 2013-02-21T14:44:28.643 に答える
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));

これは実際にはテストされていませんが、すっごくええええ....

編集: このルートを選択した場合、コントロールのサイズを変更すると、コントロールの再描画が必要になることに注意する必要があります。

于 2013-02-21T15:00:24.790 に答える