为什么文本不显示在渐变按钮中

本文关键字:渐变 按钮 显示 文本 为什么 | 更新日期: 2023-09-27 18:34:15

我使用以下代码为窗口窗体中的按钮设置渐变。它可以工作,但它的文本没有显示。我应该怎么做才能解决它?谢谢。

 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));
  }

为什么文本不显示在渐变按钮中

这是因为你从未真正绘制过该文本。目前,您仅使用渐变填充按钮的客户端矩形,但其中没有任何文本。要显示带有按钮文本的字符串,您需要向 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只是用提供的颜色,字体和位置绘制字符串。