Я использую ToolStripDropDown
элемент управления для реализации выпадающей части пользовательского элемента управления, подобного ComboBox.Чтобы быть визуально привлекательным, я налагаю MaximumSize
на выпадающий список и вручную определяю ширину каждого ToolStripButton
внутри него - в результате появляется всплывающее окно, которое имеет ту же ширину, что и активирующий его элемент управления, с заглушкойна высоту высоты раскрывающейся части.
Пример (упрощенный):
ToolStripDropDown dropDown = new ToolStripDropDown();
dropDown.MaximumSize = new Size(200, 100);
dropDown.RenderMode = ToolStripRenderMode.System;
dropDown.AutoSize = true;
for (int i = 0; i < 50; i++) {
ToolStripButton dropDownItem = (ToolStripButton)dropDown.Items.Add("Item " + i);
dropDownItem.AutoSize = false;
dropDownItem.Size = new Size(200, 20);
}
dropDown.Show(owningControl, new Point(0, owningControl.Height - 1));
Как видите, ограничения на размер всплывающего окна применяются, однако, вверх / внизкнопки прокрутки не отображаются, и, кажется, нет способа заставить их появиться.В ToolStripDropDown
не существует каких-либо методов или свойств, касающихся смещения прокрутки или механизма для прокрутки определенного элемента в поле зрения (например, EnsureVisible()
на ListViewItem
).
Как, тогда,можно получить раскрывающийся список для прокрутки?Любого метода будет достаточно, будь то полоса прокрутки, кнопки прокрутки или даже колесо мыши.
(Между прочим, я много раз пытался создать аналогичные элементы управления, используя Form
для выпадающей части - несмотря наПопытка использования десятков решений для предотвращения кражи всплывающего окна или получения фокуса при щелчке его элементов управления кажется тупиковой. Я также исключил использование ToolStripControlHost
, чей размещенный элемент управления может по-прежнему отвлекать внимание от формы, котораяоткрыл его.)