我正在使用一个ToolStripDropDown
控件来实现自定义 ComboBox 类控件的下拉部分。为了在视觉上吸引人,我MaximumSize
在下拉列表中强加 a 并手动指定其中每个的宽度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()
on ListViewItem
)。
那么,我怎样才能让下拉菜单滚动?任何方法都足够了,无论是滚动条、滚动按钮还是鼠标滚轮。
(顺便说一句,我已经尝试过很多次使用Form
下拉部分来制作类似的控件 - 尽管尝试了许多解决方案来防止弹出窗口在单击其控件时窃取焦点或获得焦点,但这似乎是一个死胡同。我有也排除了使用ToolStripControlHost
,其托管控件仍然可以将焦点从打开它的表单上移开。)