Изменить размер ToolStripMenuItem - PullRequest
4 голосов
/ 15 ноября 2010

Я специально рисую пункт меню в MenuStrip.Проблема, с которой я столкнулся, заключается в том, что пункт меню настаивает на определении размера самого текста на основе текста, а это не то, что я хочу (текст отсутствует).Я могу установить для AutoSize значение false и явно указать размер, но содержащее меню (ToolStripDropDown) по-прежнему изменяет размеры в зависимости от текста, что делает его слишком маленьким, чтобы содержать весь элемент меню.

Есть ли простой способ установить размер пункта меню?

Ответы [ 3 ]

6 голосов
/ 23 октября 2012

Этого можно достичь, добавив пустое изображение к 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 голос
/ 16 ноября 2010
  1. Вы можете установить ширину (не высоту) вашего пункта меню, используя пробелы, а затем нарисовать на пустом месте с помощью OnPaint
  2. Если вам нужно поместить изображение в выпадающий список, зачем использовать ToolStripMenuItem? Например, вы можете разместить ToolStripControlHost со встроенным изображением. И не забывайте, что вы можете изменить раскрывающийся макет, используя свойства LayoutStyle и LayoutSettings (например, от макета стека к таблице)
  3. Вы можете не только указать размер для вашего пункта меню, но вы также можете указать размер раскрывающегося списка, где он расположен. Например, когда раскрывающийся список открывается (OnOpening, Opening, DropDownOnding много способов реагирования), вы можете установить минимальную ширину (или высоту, или оба) с помощью свойства ToolStripDropDown.MinimumSize.

В целом ToolStrip - это наиболее правильно спроектированный элемент управления в пространстве имен WinForms. Он имеет почти неограниченные возможности и очень расширяемый.

Обновление: Согласно вашему комментарию. Я не могу сказать много, потому что, хотя ToolStrip имеет наибольшую архитектуру, он также очень хорошо прокомментирован, и нужно обнаружить много конкретных вещей. Я все еще добавил # 3 к своему ответу, но многие вещи можно обнаружить, только попробовав и, конечно же, с помощью Reflector.

1 голос
/ 15 ноября 2010

Этот комментарий в статье о CodeProject объясняет природу моей проблемы:

Хотя вы можете обрабатывать событие Paint для ToolStripMenuItem, ToolStripMenuItem не предназначен для"владелец обращается".Если вы хотите обрабатывать рисунок определенного элемента панели инструментов, рекомендуется создать собственный тип, производный от ToolStripItem.См. ToolStripItem Class [^] для примера.

...