【问题标题】:insert menu items in ascending order and vertically in Toolstripmenuitem在Toolstripmenuitem中以升序和垂直插入菜单项
【发布时间】:2013-10-18 07:40:24
【问题描述】:

我在toolstripmenuitem 控件中成功插入了一个项目。但我无法重新排列项目,如下所示:-

例如:- 目前,项目已添加到工具条菜单中,如下所示:-

aa bb cc dd
ee ff gg hh

但我想要这样:-

aa ee
bb ff
cc gg
dd hh

我的代码是:-

private void CreateEnterpriseHierarchy(ToolStripMenuItem selectToolStripMenuItem)
    {
        try
        {
            ToolStripMenuItem entToolStripMenuItem = new ToolStripMenuItem();
            var enterprise = CurrentUserContext.ECPTree.Where(x => x.ImageIndex == 0).FirstOrDefault();
            if (enterprise != null)
            {
                entToolStripMenuItem.Tag = enterprise;
                entToolStripMenuItem.ToolTipText = entToolStripMenuItem.Name = entToolStripMenuItem.Text = enterprise.Name;
                //entToolStripMenuItem.Enabled = enterprise.IsNodeEnabled;
                //newToolStripMenuItem.Image = 
                entToolStripMenuItem.Image = this.imgListMenu.Images[0];
                CreateCompanyList(entToolStripMenuItem, enterprise);
            }
            else
            {
                entToolStripMenuItem.Text = "---------";
            }

            // To open Hierarchy of Enterprise - Companies and Properties with Multiple Columns

            ToolStripDropDown menu = new ToolStripDropDown();
            ToolStripItem[] items = new ToolStripItem[entToolStripMenuItem.DropDown.Items.Count];
            entToolStripMenuItem.DropDown.Items.CopyTo(items, 0);

            // Transfer the items into the drop-down menu.
            foreach (ToolStripItem item in items)
            {
                if (!(item is ToolStripSeparator)) menu.Items.Add(item);
            }

            // Adjust the layout of the new menu.
            menu.LayoutStyle = ToolStripLayoutStyle.Table;
            ((TableLayoutSettings)menu.LayoutSettings).ColumnCount = 6;

            // Attach it to the menu.
            entToolStripMenuItem.DropDown = menu;

            selectToolStripMenuItem.DropDownItems.Add(entToolStripMenuItem);
        }
        catch (Exception ex)
        {
            CusException cex = new CusException(ex);
            cex.Show(MessageBoxIcon.Error);
        }
    }

以及 CreateCompanyList 方法:-

void CreateCompanyList(ToolStripMenuItem selectedMenuItem, SCTreeView Enterprise)
    {
        try
        {
            ToolStripMenuItem enterpiseMenuItem = new ToolStripMenuItem();
            enterpiseMenuItem.Text = selectedMenuItem.Text;
            enterpiseMenuItem.Tag = selectedMenuItem.Tag;
            enterpiseMenuItem.Name = enterpiseMenuItem.Text = selectedMenuItem.Name;
            enterpiseMenuItem.Enabled = Enterprise.IsNodeEnabled;
            enterpiseMenuItem.ImageIndex = 0;
            enterpiseMenuItem.Image = this.imgListMenu.Images[0];
            enterpiseMenuItem.Click += new EventHandler(DisplaySelectedLevel);
            selectedMenuItem.DropDownItems.Add(enterpiseMenuItem);
            selectedMenuItem.DropDownItems.Add(new ToolStripSeparator());
            foreach (var item in CurrentUserContext.ECPTree)
            {
                if (item.ImageIndex == 1)
                {
                    ToolStripMenuItem companyMenuItem = new ToolStripMenuItem();
                    companyMenuItem.Tag = item;
                    companyMenuItem.Name = companyMenuItem.Text = item.Name;
                    // companyMenuItem.Enabled = item.IsNodeEnabled;
                    var lstProperties = CurrentUserContext.ECPTree.Where(x => x.ParentID == item.ID).ToList();
                    if (lstProperties.Count == 0)
                    {
                        companyMenuItem.Click += new EventHandler(DisplaySelectedLevel);
                    }
                    companyMenuItem.ImageIndex = item.ImageIndex;
                    companyMenuItem.Image = this.imgListMenu.Images[1];
                    selectedMenuItem.DropDownItems.Add(companyMenuItem);

                    CreatePropertyList(item, companyMenuItem);
                }
            }
            if (selectedMenuItem.DropDown.Height > 500)
            {
                selectedMenuItem.DropDown.AutoSize = true;
                selectedMenuItem.DropDown.Height = 500;
            }
            selectedMenuItem.DropDownDirection = ToolStripDropDownDirection.Default;
        }
        catch (Exception ex)
        {
            CusException cex = new CusException(ex);
            cex.Show(MessageBoxIcon.Error);
        }
    }

有什么方法可以实现想要的布局风格吗?

感谢任何帮助或想法。

【问题讨论】:

    标签: c# toolstripdropdown toolstripmenu toolstripitem


    【解决方案1】:

    标准的 .Net 菜单栏有点乱,尤其是垂直显示时。

    将这些值应用于您的主菜单栏属性:

    • 文本方向:Vertical90
    • LayoutStyle:VerticalStackWithOverflow
    • 码头:左

    这将使您的菜单栏比您预期的要大,但它依赖于它的项目width。当你想添加你的菜单时记得指定它的宽度。

    【讨论】:

    • 嗨,MahanGM!我应该在哪里应用这些属性?
    • @user2691432 我假设您有一个主菜单条,您可以在其中放置所有子菜单。在创建根菜单的任何地方,您都应该将它们应用到该菜单。
    猜你喜欢
    • 2011-09-06
    • 2023-03-29
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 2023-03-26
    • 2012-02-15
    相关资源
    最近更新 更多