c# - "Pin"控制ToolstripMenu中的项目

标签 c# winforms toolstripdropdown toolstripitem

首先,简要概述一下我当前的用户界面:

Current UI

请注意,除了 ToolStripControlHost 中的内容外,其他所有内容都是标准的 WinForms。

简而言之,我想要类似于 ToolStripControlHost 的东西,但我需要将它“固定”到菜单的底部,主要是这样当有很多项目时,它不会像菜单的其余部分那样滚动项目。

经过一番搜索后,我得出的结论是,也许自定义绘画可能是解决方案,但我不知道情况是否如此。

这是一些示例代码,但我不确定它的用处:

public ToolStripDropDownButtonContainer(ToolStripDropDownButton button)
{
    this.UIControl = button.GetCurrentParent();
    this.Button = button;

    if (this.Button.Tag == null)
    {
        this.Button.Tag = true;

        this.Button.DropDownDirection = ToolStripDropDownDirection.AboveLeft;
        ToolStripDropDownMenu menu = (ToolStripDropDownMenu)this.Button.DropDown;

        menu.SuspendLayout();
        try
        {
            menu.BackColor = Color.White;
            menu.ShowImageMargin = false;
            menu.ShowCheckMargin = false;
            menu.AutoSize = true;
            menu.Margin = Padding.Empty;
            menu.Padding = Padding.Empty;
            menu.GripMargin = Padding.Empty;
            menu.GripStyle = ToolStripGripStyle.Hidden;
            menu.MinimumSize = new Size(310, 0);
            menu.MaximumSize = menu.MinimumSize;
            // TODO pin panel (or some control) to the bottom-side of the menu
        }
        finally
        {
            menu.ResumeLayout();
        }
    }
}

最佳答案

我对这个问题的解决方案是完全避免使用普通的菜单控制包含系统,而是让菜单显示一个 FlowLayoutPanel,它包含我的菜单项。

这涉及到必须添加一些不同的技巧才能使面板与 UI 完美配合。这种方法的额外优势是更加灵活和对系统的控制。

不利的一面是,当我有大量子项时,我注意到性能会下降,但我会单独调查这个问题。

关于c# - "Pin"控制ToolstripMenu中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27634915/

相关文章:

c# - Microsoft Bot Framework System.ArgumentException : 'EncryptedText is not properly formatted'

c# - 如何关闭表单并重新打开它?

c# - 禁用工具条下拉按钮的选择和下拉符号

c# - 使用异步获取坐标并存储在 C# 模型中

c# - DataAnnotations "NotRequired"属性

c# - 如何在内容控制c#中获取特定表

c# - 如何在 Webbrowser 控件中禁用 “Security Warning” 窗口

c# - 如何清除picturebox中的图形(矩形)

c# - 如何更改打开的 ToolStripDropDownButton 的背景色?