5

我正在自定义绘制一个菜单项MenuStrip。我遇到的问题是菜单项坚持根据文本调整自身大小,这不是我想要的(没有文本)。我可以设置AutoSize为 false 并明确指定大小,但包含的菜单 ( 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。并且不要忘记您可以使用LayoutStyleLayoutSettings属性更改下拉布局(例如从堆栈布局到表格布局)
  3. 您不仅可以指定菜单项的大小,还可以指定下拉菜单项所在位置的大小。例如,当下拉菜单打开时(OnOpening、Opening、DropDownOpending 多种反应方式),您可以使用 ToolStripDropDown.MinimumSize 属性设置最小宽度(或高度,或两者)。

一般来说,ToolStrip 是 WinForms 命名空间中结构最恰当的控件。它具有几乎无限的可能性并且非常可扩展。

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

于 2010-11-15T22:00:03.603 回答