You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Tooltip文本字号?自定义绘制后出现黑块问题求助

调整Tooltip文本字号后显示异常的解决方法

问题详情

已将OwnerDraw属性设为true,并添加了Draw事件,代码如下:

private void toolTip1_Draw(object sender, DrawToolTipEventArgs e)
{
    using (StringFormat sf = new StringFormat())
    {
        sf.Alignment = StringAlignment.Center;
        sf.LineAlignment = StringAlignment.Center;
        sf.HotkeyPrefix = System.Drawing.Text.HotkeyPrefix.None;
        sf.FormatFlags = StringFormatFlags.NoWrap;
        using (Font f = new Font("Tahoma", 12))
        {
           e.Graphics.DrawString(e.ToolTipText, f,
           SystemBrushes.ActiveCaptionText, e.Bounds, sf);
        }
     }
}

首次鼠标悬停带Tooltip的控件时,文本字号正常变大;但后续悬停其他控件时,Tooltip显示为黑色块(表现为首次正常,后续控件显示黑色矩形)。未使用Draw事件前一切正常,需求为调整Tooltip文本字号并解决该显示异常。

解决方法

问题根源是开启OwnerDraw模式后,系统默认的背景绘制逻辑被跳过,仅绘制文本会导致后续触发时背景未正确渲染,出现黑色块。修改代码如下:

private void toolTip1_Draw(object sender, DrawToolTipEventArgs e)
{
    // 先绘制默认背景,修复黑色块问题
    e.DrawBackground();
    // 绘制默认边框(可选,保持Tooltip外观一致性)
    e.DrawBorder();
    
    using (StringFormat sf = new StringFormat())
    {
        sf.Alignment = StringAlignment.Center;
        sf.LineAlignment = StringAlignment.Center;
        sf.HotkeyPrefix = System.Drawing.Text.HotkeyPrefix.None;
        sf.FormatFlags = StringFormatFlags.NoWrap;
        using (Font f = new Font("Tahoma", 12))
        {
           // 绘制自定义字号的文本
           e.Graphics.DrawString(e.ToolTipText, f, SystemBrushes.ToolTipText, e.Bounds, sf);
        }
     }
}

额外说明

  • 若需要自定义背景样式,可替换e.DrawBackground()为手动绘制逻辑,示例:
    // 用浅黄色作为Tooltip背景
    e.Graphics.FillRectangle(Brushes.LightYellow, e.Bounds);
    

内容的提问来源于stack exchange,提问作者Daniel Lip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:45:37