工具提示文本格式:*部分粗体*

时间:2015-01-23 18:43:29

标签: c# winforms tooltip

问题:我想将工具提示文本部分加粗。

我想在工具提示中显示的示例文本:

label1: label1Value

label2: label2Value

到目前为止的进展:我使用自己的Draw事件实现创建了一个自定义的tooptip类。我用过:

DrawToopTipEventArgs newAgrs = new DrawToopTipEventArgs (
    e.Graphics, e.AssociatedWindow, e.AssociatedControl, 
    e.Bounds, e.ToolTipText, this.BackColor, this.ForeColor,
    new Font("Arial Unicode MS", 8.25F, FontStyle.Bold));

newAgrs.DrawText(TextFormatFlags.TextBoxControl);

主要问题:这种方式能够使完整的tooltiptext变粗,但仍然坚持我只能使值部分变为粗体并保持标签的其余部分不变。 (如上所示)。

1 个答案:

答案 0 :(得分:1)

您必须自己测量文字并绘制所有内容。

private void ToolTip_Draw(object sender, DrawToolTipEventArgs e)
{
    using (var boldFont = new Font(e.Font, FontStyle.Bold))
    {
        var headerText = "Header: ";
        var valueText = "Value";

        var headerTextSize = TextRenderer.MeasureText(headerText, e.Font);

        TextRenderer.DrawText(e.Graphics, headerText, e.Font, e.Bounds.Location, Color.Black);

        var valueTextPosition = new Point(e.Bounds.X + headerTextSize.Width, e.Bounds.Y);
        TextRenderer.DrawText(e.Graphics, valueText, boldFont, valueTextPosition, Color.Black);
    }
}

为简单起见,我对标题和值字符串进行了硬编码。将其扩展为多行工作应该是微不足道的。测量的文本大小具有高度,您还可以从Font对象本身获得高度。

你的例子是让一切变得大胆的原因是你只是将所有绘图委托给DrawToolTipEventArgs的实例并使用新字体并告诉它绘制工具提示文本(全部)用新的论点。它很高兴地使用了新字体并使用它绘制了所有文本。

要记住的另一件事是,还应该处理Popup事件。这甚至用于测量工具提示的大小,因此您有足够的空间来绘制文本。如果您不处理它,它可能不够宽,无法处理粗体字体。具体来说,您需要设置PopupEventArgs.ToolTipSize属性。