でメニュー項目をカスタム描画していますMenuStrip
。私が抱えている問題は、メニュー項目がテキストに基づいてサイズ設定を要求することです。これは私が望むものではありません(テキストがありません)。falseに設定AutoSize
してサイズを明示的に指定できますが、含まれているメニュー(ToolStripDropDown
)はテキストに基づいてサイズを変更するため、メニュー項目全体を含めるには小さすぎます。
メニュー項目のサイズを設定する簡単な方法はありますか?
でメニュー項目をカスタム描画していますMenuStrip
。私が抱えている問題は、メニュー項目がテキストに基づいてサイズ設定を要求することです。これは私が望むものではありません(テキストがありません)。falseに設定AutoSize
してサイズを明示的に指定できますが、含まれているメニュー(ToolStripDropDown
)はテキストに基づいてサイズを変更するため、メニュー項目全体を含めるには小さすぎます。
メニュー項目のサイズを設定する簡単な方法はありますか?
に空の画像を追加することで実現できます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);
}
}
CodeProject に関する記事のこのコメントは、私の問題の性質を説明しています。
ToolStripMenuItem の Paint イベントを処理できますが、ToolStripMenuItem は「所有者描画」を意図したものではありません。特定のツール ストリップ アイテムの描画を処理する場合、推奨される方法は、独自の ToolStripItem 派生型を作成することです。例については、 ToolStripItem クラス[^] を参照してください。
一般に、ToolStrip は WinForms 名前空間で最も適切に構築されたコントロールです。ほぼ無限の可能性があり、非常に拡張可能です。
更新:あなたのコメントによると。多くを語ることはできません。なぜなら、ToolStrip は最もアーキテクチャ化されている一方で、非常に優れたコメントも寄せられており、多くの特定の事柄を発見する必要があるからです。私はまだ #3 を回答に追加しましたが、多くのことは、試して、もちろん Reflector を使用することによってのみ発見できます。