5

でメニュー項目をカスタム描画していますMenuStrip。私が抱えている問題は、メニュー項目がテキストに基づいてサイズ設定を要求することです。これは私が望むものではありません(テキストがありません)。falseに設定AutoSizeしてサイズを明示的に指定できますが、含まれているメニュー(ToolStripDropDown)はテキストに基づいてサイズを変更するため、メニュー項目全体を含めるには小さすぎます。

メニュー項目のサイズを設定する簡単な方法はありますか?

4

3 に答える 3

6

に空の画像を追加することで実現できますtoolStripItem。画像のサイズを変更して、目的のサイズにしますToolStripItem。私は以下のように私のプロジェクトでこれを行いました:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

public partial class Form1 : Form
{    
    public Form1()
    {
        Bitmap emptyImage = new Bitmap(48, 48);
        ToolStripMenuItem  m_Item = new ToolStripMenuItem(System.Convert.ToString("All       Programs",emptyImage);
        m_Item.ImageAlign = ContentAlignment.MiddleLeft;
        m_Item.ImageScaling = ToolStripItemImageScaling.None;                        
        m_Item.Name = btnId.ToString();
        MenuStrip menu = new MenuStrip();
        menu.Items.Add(m_Item);
    }
}
于 2012-10-23T09:45:00.023 に答える
1

CodeProject に関する記事のこのコメントは、私の問題の性質を説明しています。

ToolStripMenuItem の Paint イベントを処理できますが、ToolStripMenuItem は「所有者描画」を意図したものではありません。特定のツール ストリップ アイテムの描画を処理する場合、推奨される方法は、独自の ToolStripItem 派生型を作成することです。例については、 ToolStripItem クラス[^] を参照してください。

于 2010-11-15T19:18:33.477 に答える
1
  1. スペースを使用してメニュー項目の幅 (高さではなく) を設定し、OnPaint で空のスペースに描画できます
  2. 画像をドロップダウンに配置する必要がある場合、なぜ ToolStripMenuItem を使用するのでしょうか? たとえば、Image が埋め込まれた ToolStripControlHost を配置できます。また、 LayoutStyleおよびLayoutSettingsプロパティを使用してドロップダウン レイアウトを変更できることを忘れないでください(たとえば、スタックからテーブル レイアウトへ)。
  3. メニュー項目のサイズを指定できるだけでなく、それが配置されているドロップダウンのサイズも指定できます。たとえば、ドロップダウンが開いている場合 (OnOpening、Opening、DropDownOpending のさまざまな反応方法)、ToolStripDropDown.MinimumSize プロパティを使用して最小幅 (または高さ、またはその両方) を設定できます。

一般に、ToolStrip は WinForms 名前空間で最も適切に構築されたコントロールです。ほぼ無限の可能性があり、非常に拡張可能です。

更新:あなたのコメントによると。多くを語ることはできません。なぜなら、ToolStrip は最もアーキテクチャ化されている一方で、非常に優れたコメントも寄せられており、多くの特定の事柄を発見する必要があるからです。私はまだ #3 を回答に追加しましたが、多くのことは、試して、もちろん Reflector を使用することによってのみ発見できます。

于 2010-11-15T22:00:03.603 に答える