更改ToolStripMenuItem的大小

时间:2010-11-15 17:37:08

标签: winforms menustrip ownerdrawn

我在MenuStrip自定义绘制菜单项。我遇到的问题是菜单项坚持根据文本调整自身大小,这不是我想要的(没有文本)。我可以将AutoSize设置为false并明确指定大小,但包含菜单({​​{1}})仍然会根据文本调整自身大小,这会导致它太小而无法包含整个菜单项。

有没有直接的方法来设置菜单项的大小?

3 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:1)

an article on CodeProject中的这条评论解释了我的问题的性质:

  

虽然您可以处理ToolStripMenuItem的Paint事件,但ToolStripMenuItem并不是“所有者绘制的”。如果要处理特定工具条项的绘制,建议的方法是创建自己的ToolStripItem派生类型。有关示例,请参阅ToolStripItem Class [^]。

答案 2 :(得分:1)

  1. 您可以使用空格设置菜单项的宽度(而不是高度),然后使用OnPaint在空白区域上绘图
  2. 如果您需要将图片放入下拉列表中,为什么要使用ToolStripMenuItem?例如,您可以将ToolStripControlHost与Image嵌入。并且不要忘记您可以使用LayoutStyleLayoutSettings属性(例如从堆栈到表格布局)更改下拉布局。
  3. 您不仅可以指定菜单项的大小,还可以指定下拉列表的大小。例如,当打开下拉菜单(OnOpening,Opening,DropDownOpending,许多反应方式)时,您可以使用ToolStripDropDown.MinimumSize属性设置最小宽度(或高度,或两者)。
  4. 通常,ToolStrip是WinForms命名空间中最合适的架构控件。它具有几乎无限的可能性和非常可扩展性。

    更新:根据您的评论。我不能说太多,因为虽然ToolStrip是最常用的架构,但它的评论也非常好,需要发现许多特殊的东西。我仍然在我的答案中添加了#3,但是只有通过尝试和当然使用Reflector才能发现很多东西。