Как добавить полосу прокрутки в раскрывающемся меню? - PullRequest
0 голосов
/ 04 мая 2020

В элементе меню слишком много элементов.
Примерно так:

Long menu dropdown

Выглядит очень долго и плохо. Я хочу добавить полосу прокрутки к элементам полосы меню.
Я хочу просмотреть 3 из этих элементов с помощью полосы прокрутки.
Как я могу это сделать?

1 Ответ

1 голос
/ 04 мая 2020

Вы можете установить максимальную высоту DropDown элемента MenuItem, используя свойство ToolStripMenuItem.DropDown MaximumSize.

Вы можете определить высоту DropDown на основе максимального количества элементов, которые вы хотите показать. Или любая другая мера, которая имеет смысл в вашем сценарии (может быть, мера, которая соответствует текущей ClientSize.Height формы).

Чтобы указать высоту относительно максимального количества субэлементов (здесь maxSubMenuItems), суммируйте высоту первых субэлементов maxSubMenuItems и используйте эту меру для установки свойства MaximumSize.

Появятся стандартные (верхняя и нижняя) кнопки прокрутки.

Здесь я использую значение maxHeight + (maxHeight / maxSubMenuItems), чтобы добавить немного места вверху и внизу раскрывающегося списка, в противном случае меню может не поместиться, и оно также выглядит лучше :)

Вставьте этот код в конструктор формы (после InitializeComponent()) или в Form.Load:

int maxSubMenuItems = 6;

if (toolStripMenuItem1.DropDownItems.Count > maxSubMenuItems) {
    int maxHeight = toolStripMenuItem1.DropDownItems
        .OfType<ToolStripMenuItem>()
        .Take(maxSubMenuItems)
        .Sum(itm => itm.Height);

    toolStripMenuItem1.DropDown.MaximumSize = 
       new Size(toolStripMenuItem1.DropDown.Width, maxHeight + (maxHeight / maxSubMenuItems));
}

► Это может пригодиться, когда вам нужно показать список подпунктов, представляющих шрифты , например. Поэтому вы можете захотеть показать строку, нарисованную с использованием имени шрифта в списке. Или аналогичные ситуации, когда вам нужно представить один, потенциально длинный, раскрывающийся список.

В других случаях попробуйте ограничить количество элементов в ToolStripMenuItem с помощью подменю.

...