在C#中,如何在工具提示中为文本的不同部分更改不同的颜色?

时间:2019-05-24 06:03:12

标签: c# tooltip

在MS图表中,我使用以下代码显示工具提示。

ToolTip ToolTip = new ToolTip();
ToolTip .Show(" X value:"+s+"\nLine 1 Y value: =" + ss + "\nLine 2 Y value:=" + ss1, chart, (int)e.Location.X, (int)e.Location.Y);

我只能使用ToolTip设置一种前景色。ForeColor= System.Drawing.Color.Red;。

我是C#的新手。

如何在自定义工具提示类中分配不同的颜色并绘制文本,或者如何使用HTML渲染器实现我的要求?

我无法为工具提示文本的不同部分分配不同的颜色。

如何实现?

2 个答案:

答案 0 :(得分:1)

您可以所有者绘制工具提示

enter image description here

示例:

ToolTip ToolTip = new ToolTip();
ToolTip.OwnerDraw = true;
ToolTip.Popup += (ss, ee) => { ee.ToolTipSize = new Size(200, 50);  };

ToolTip.Draw += (ss, ee) =>
{
    ee.DrawBackground();
    ee.DrawBorder();
    ee.Graphics.DrawString("Warning", Font, Brushes.Red, 10, 1);
    ee.Graphics.DrawString(ee.ToolTipText, Font, Brushes.Black, 1, 22);

};

ToolTip.Show("Demo only", somecontrol..);

这只是一个简单的例子;工具提示样式还有更多参数,包括绘图内容,图像,各种类型的笔刷等。

还建议使用TextRenderer代替经典的GDI + DrawString

请注意如何在Size事件中设置PopUp

文本可以进行各种格式设置;对于多行文本,建议使用带有边界矩形的重载而不是x / y坐标,并且也可以使用StringFormat对齐。不过请注意,将格式化的部分嵌入文本内部始终是棘手的。

可能,但要像GDI绘图一样一味地做到正确就很乏味。 -- 基本技巧是首先确定一个边界矩形。这可以通过MeasureString完成。

答案 1 :(得分:0)

简短的回答是“本来就根本做不到”(除非您认为自己绘制标签是本机的)。但是像往常一样,在编程中也有一些创新的方法来获得所需的结果。

Question Orel suggested中的答案基本上是利用HTML标记渲染器在应用程序内部渲染样式化文本。 如果您查看该库here的较新版本,它们实际上提供了WinForms ToolTip控件,该控件接受HTML标记以在其内容区域内进行呈现。

要使用此渲染器,他们提供了一个nuget软件包,它使安装变得很简单。只需管理您的项目nuget软件包并搜索HtmlRenderer.WinForms并安装最新版本。 (请检查它是否还安装了最新版本的HtmlRenderer.Core,因为它没有安装在我的头上,因此我必须更新Core软件包)

在此之后,重建项目以在设计器工具箱中获取新控件。 为了测试该程序包,我将一个文本框和一个HtmlToolTip拖到了窗体上。要设置新的工具提示,请像正常的WinForms工具提示一样使用它。

public partial class Form1 : Form
{
    public Form1()
    {
      InitializeComponent();

      this.htmlToolTip1.SetToolTip(this.textBox1, "<h1 style=\"color:red\">Hello</h1><i style=\"color:blue\">World</i>");
    }
}

现在,您可以使用HTML标记设置工具提示内容的样式,并根据需要更改前景色:

Screenshot