样式化按钮内的文本

本文关键字:文本 按钮 样式 | 更新日期: 2023-09-27 18:16:00

我想在我的按钮中有一个多行文本字符串,像这样:

myButton.Text = "abc" + Environment.NewLine + "123";

可以分别设置每一行的样式吗?例:我希望第一行加粗,第二行斜体?

如果这是不可能的,谁能推荐一种替代方法来实现这一目标?

谢谢

样式化按钮内的文本

要做到这一点可能需要做很多工作,但这是一个开始。

这将是继承的类:

using System;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
    public class MyButton : Button
    {
        private Boolean _pressed = false;
        protected override void OnPaint(PaintEventArgs pevent)
        {
            if (_pressed)
                ControlPaint.DrawButton(pevent.Graphics, pevent.ClipRectangle, ButtonState.Pushed);
            else
                ControlPaint.DrawButton(pevent.Graphics, pevent.ClipRectangle, ButtonState.Normal);
            pevent.Graphics.DrawString("Line 1", new System.Drawing.Font("Arial", 8.5f, System.Drawing.FontStyle.Regular), System.Drawing.Brushes.Black, new System.Drawing.PointF(2.0f, 2.0f));
            pevent.Graphics.DrawString("Line 2", new System.Drawing.Font("Tahoma", 14.0f, System.Drawing.FontStyle.Bold), System.Drawing.Brushes.Red, new System.Drawing.PointF(2.0f, 17.0f));
        }
        protected override void OnMouseUp(MouseEventArgs mevent)
        {
            _pressed = false;
            base.OnMouseUp(mevent);
        }
        protected override void OnMouseDown(MouseEventArgs mevent)
        {
            _pressed = true;
            base.OnMouseDown(mevent);
        }
    }
}

您必须以编程方式添加一个MyButton对象到您的表单,或添加一个正常的按钮,进入Form1.Designer.cs并将其类型从Button更改为MyButton

请注意,我没有使用Text1 + Environment.NewLine + Text2,而是通过精确定位来绘制。这可以让你精确地计算它需要在哪里。

你可以利用Graphics.MeasureString进一步帮助自己。这可以帮助您确定所绘制的字符串的确切大小,从而了解它占用了多少空间。

您还需要确保按钮总是足够大,以正确显示您想要显示的文本。也可以在覆盖中完成,或者只是在设计时设置大小并使文本适合它。无论.