是否可以更改ToolStripMenuItem工具提示字体?

Ely*_*aSh 6 .net c# tooltip toolstrip winforms

我有一个动态填充的ContextMenuStrip,其中每个ToolStripMenuItem都有一个工具提示的格式化文本.并且,为了使该文本对用户有意义,我必须使用等宽字体,例如"Courier New".默认字体是常规非等宽字体.我找不到ToolTip对象的任何getter,也没有找到覆盖其Draw事件的方法,也没有设置其样式的方法.

那么,甚至可以更改ToolStripMenuItem的工具提示字体吗?

实现继承自ToolTip的CustomToolTip无法解决问题,即将新工具提示传递给ToolStripMenuItem.

Ely*_*aSh 12

好的,感谢Tony AbramsWilliam Andrus,解决方案如下:

  • 初始化的ToolTip的静态实例.

    toolTip = new ToolTip();
    toolTip.OwnerDraw = true;
    toolTip.Draw += new DrawToolTipEventHandler(tooltip_Draw);
    toolTip.Popup += new PopupEventHandler(tooltip_Popup);    
    toolTip.UseAnimation = true;
    toolTip.AutoPopDelay = 500;
    toolTip.AutomaticDelay = 500;
    
    Run Code Online (Sandbox Code Playgroud)
  • ToolTip的Popup事件设置其大小.

    void tooltip_Popup(object sender, PopupEventArgs e)
    {
        e.ToolTipSize = TextRenderer.MeasureText(toolTipText, new Font("Courier New", 10.0f, FontStyle.Bold));
        e.ToolTipSize = new Size(e.ToolTipSize.Width + TOOLTIP_XOFFSET, e.ToolTipSize.Height + TOOLTIP_YOFFSET);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 用于实际绘图的ToolTip的Draw事件.

    void tooltip_Draw(object sender, DrawToolTipEventArgs e)
    {
    Rectangle bounds = e.Bounds;
    bounds.Offset(TOOLTIP_XOFFSET, TOOLTIP_YOFFSET);
    DrawToolTipEventArgs newArgs = new DrawToolTipEventArgs(e.Graphics, e.AssociatedWindow, e.AssociatedControl, bounds, e.ToolTipText, toolTip.BackColor, toolTip.ForeColor, new Font("Courier New", 10.0f, FontStyle.Bold));
        newArgs.DrawBackground();
        newArgs.DrawBorder();
        newArgs.DrawText(TextFormatFlags.TextBoxControl);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • ToolStripMenuItem的MouseEnter事件显示工具提示.

    System.Windows.Forms.ToolStripMenuItem item = (sender as System.Windows.Forms.ToolStripMenuItem);
    toolTip.SetToolTip(item.Owner, "ToolTipText");
    
    Run Code Online (Sandbox Code Playgroud)


Ton*_*ams 3

您可以创建一个继承自 ToolTip 的自定义 ToolTip 类 (CustomToolTip)。然后你必须处理 OnDraw 事件。在该事件中您可以更改字体。

在这里查看示例(有一个 vb 和 c# 示例)。

编辑

您必须自行处理自定义工具提示的呈现(即:toolstripmenuitem 的 OnMouseOver、OnMouseLeave 事件)。您也许能够创建一个使用自定义工具提示的customtoolstripmenuitem,但我不确定toolstripmenuitem 是否公开工具提示属性/对象。