如何将滚动条添加到菜单项下拉列表中?

How to add a scrollbar to a Menu item dropdown?

菜单栏项目中的项目太多。
像这样:

看起来很长很糟糕。我想为菜单条项目添加滚动条。
我想在滚动条的帮助下查看其中的 3 个项目。
我该怎么做?

您可以使用 ToolStripMenuItem.DropDown MaximumSize 属性 设置 MenuItem 下拉菜单的最大高度。

您可以根据要显示的最大项目数来确定 DropDown 的高度。或者在您的场景中有意义的任何其他度量(可能是适合表单当前 ClientSize.Height 的度量)。

要指定相对于最大子项数的高度(此处为 maxSubMenuItems),请将前 maxSubMenuItems 个子项的高度相加并使用此度量来设置 MaximumSize 属性。

将出现标准(顶部和底部)滚动按钮。

在这里,我使用 maxHeight + (maxHeight / maxSubMenuItems) 值,在下拉列表的顶部和底部添加一些 space,否则菜单可能放不下,但看起来也更好: )

将此代码插入窗体的构造函数(在 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 的项目数。