0

以下のコードを使用して、Windows フォームのボタンにグラデーションを設定します。動作しますが、テキストが表示されません。修正するにはどうすればよいですか?ありがとうございました。

 private void Form1_Load(object sender, EventArgs e)
 {
       button2.Paint += new PaintEventHandler(this.Button2_Paint);
 }
 private void Button2_Paint(object sender, PaintEventArgs e)
 {
      Graphics g = e.Graphics;
      g.FillRectangle(new System.Drawing.Drawing2D.LinearGradientBrush(PointF.Empty, new PointF(button2.Width, button2.Height), Color.Pink, Color.Red), new RectangleF(PointF.Empty, button2.Size));
  }
4

1 に答える 1

0

それは、実際にそのテキストを描画したことがないためです。現在、ボタンのクライアントの四角形をグラデーションで塗りつぶすだけですが、その中にテキストはありません。ボタンのテキストを含む文字列を表示するには、Paint メソッドにさらに行を追加する必要があります。

 private void Button2_Paint(object sender, PaintEventArgs e)
 {
    Button btn= (Button)sender;
    Graphics g = e.Graphics;
    g.FillRectangle(new System.Drawing.Drawing2D.LinearGradientBrush(PointF.Empty, new PointF(button2.Width, button2.Height), Color.Pink, Color.Red), new RectangleF(PointF.Empty, button2.Size));
    SizeF size = g.MeasureString(btn.Text, btn.Font);
    PointF topLeft = new PointF(btn.Width / 2 - size.Width / 2, btn.Height / 2 - size.Height / 2);
    g.DrawString(btn.Text, btn.Font, Brushes.Black, topLeft);
  }

ここでGraphics.MeasureStringは、ボタンの Text プロパティの幅と高さを提供します。これらの値は、ボタンの中央にテキストを配置するために使用されます。Graphics.DrawStringは、指定された色、フォント、および位置で文字列を描画するだけです。

于 2013-10-05T22:45:30.180 に答える