如何修改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
相关产品推荐
相关产品推荐

