8

各 ToolStripMenuItem にツールヒント用の書式設定されたテキストがある、動的に入力された ContextMenuStrip があります。そして、このテキストをユーザーにとって意味のあるものにするために、「Courier New」などの等幅フォントを使用する必要があります。デフォルトのフォントは通常の非モノスペース フォントです。ToolTip オブジェクトのゲッターも、その Draw イベントをオーバーライドする方法も、そのスタイルを設定する方法も見つかりませんでした。

それで、ToolStripMenuItem のツールチップ フォントを変更することさえ可能ですか?

ToolTip を継承する CustomToolTip を実装しても、新しいツールヒントが ToolStripMenuItem に渡されるという問題は解決しません。

4

3 に答える 3

14

OK、 TonyAbramsWilliamAndrusのおかげで、解決策は次のようになります。

  • 初期化した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;
    
  • サイズを設定するためのToolTipのポップアップイベント。

    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);
    }
    
  • 実際の描画のための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);
    }
    
  • ツールチップを表示するToolStripMenuItemのMouseEnterイベント。

    System.Windows.Forms.ToolStripMenuItem item = (sender as System.Windows.Forms.ToolStripMenuItem);
    toolTip.SetToolTip(item.Owner, "ToolTipText");
    
于 2011-01-12T13:33:36.610 に答える
3

ToolTip から継承するカスタム ToolTip クラス (CustomToolTip) を作成できます。次に、OnDraw イベントを処理する必要があります。そのイベント内でフォントを変更できます。

例については、こちらをご覧ください (vb と c# の例があります)。

編集

カスタム ツールチップのレンダリングを自分で処理する必要があります (IE: toolstripmenuitem の OnMouseOver、OnMouseLeave イベント)。カスタム ツールチップを使用する customtoolstripmenuitem を作成できるかもしれませんが、toolstripmenuitem がツールチップ プロパティ/オブジェクトを公開するかどうかはわかりません。

于 2011-01-11T12:09:00.753 に答える