首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#动态创建ContextMenuStrip子菜单和项

C#动态创建ContextMenuStrip子菜单和项
EN

Stack Overflow用户
提问于 2016-01-18 15:45:07
回答 2查看 2.7K关注 0票数 0

我有一个contextMenuStrip,它在数据库中生成动态表单数据。数据库中的数据有一个组列,我想使用它为应用程序动态创建Sub菜单。我的问题是,它创建了重复的子菜单项目,我希望它分组。

这是我的名单和建设者。

代码语言:javascript
复制
List<Tuple<WebLinks>> WebLinksList = new List<Tuple<WebLinks>>();

class WebLinks
{
    public string Name { get; set; }
    public string Link { get; set; }
    public string Group { get; set; }
}

到目前为止,这是构建上下文菜单的工作代码,但我需要将其更改为Group视图,而不仅仅是显示名称。

代码语言:javascript
复制
private void CreateMenu()
{

    foreach (Tuple<WebLinks> wl in WebLinksList)
    {
        contextMenuStripMain.Items.Add(wl.Item1.Name);
    }
    contextMenuStripMain.Items.Add("-");
    contextMenuStripMain.Items.Add("Settings");
    contextMenuStripMain.Items.Add("Exit");
}

上面的工作原理很好,但是没有分组,所以我需要在"wl.Item1.Group“中工作,但是google在我的情况下没有帮助。

我累了This Stack Overflow,它给了我重复的组,在那里,我试图过滤它,但没有运气。希望我说得通。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-18 16:21:45

您可以使用LINQ对对象进行分组:

代码语言:javascript
复制
private void CreateMenu()
{
    foreach (var group in WebLinksList.GroupBy(wl => wl.Item1.Group))
    {
        var groupItem = new ToolStripMenuItem(group.Key);
        contextMenuStripMain.Items.Add(groupItem);
        groupItem.DropDownItems.AddRange(group.Select(w => new ToolStripMenuItem(w.Item1.Name)).ToArray<ToolStripItem>());
    }

    contextMenuStripMain.Items.Add("-");
    contextMenuStripMain.Items.Add("Settings");
    contextMenuStripMain.Items.Add("Exit");
}

因此,对于每个不同的Group,将添加一个菜单项。该组的子项由Name添加到该项。

编辑我现在创建groupItem作为ToolStripMenuItem,并将子项添加到DropDownItems属性。

票数 1
EN

Stack Overflow用户

发布于 2016-01-19 12:20:59

谢谢勒内·沃格特。我修正了如果在我读你的答案之前,但我还是想跟你一起去。

这是您的修补程序,我刚刚为子菜单添加了一个单击事件。

代码语言:javascript
复制
        foreach (var group in WebLinksList.GroupBy(wl => wl.Level))
        {
            var groupItem = new ToolStripMenuItem(group.Key);
            contextMenuStripMain.Items.Add(groupItem);
            groupItem.DropDownItemClicked += Tm_DropDownItemClicked;
            groupItem.DropDownItems.AddRange(group.Select(w => new ToolStripMenuItem(w.Name)).ToArray<ToolStripItem>());
        }

这是我的修正,但它是一样的。

代码语言:javascript
复制
        foreach (var group in WebLinksList.GroupBy(wl => wl.Level))
        {
            ToolStripMenuItem tm = new ToolStripMenuItem();
            tm.Text = group.Key;
            tm.DropDownItemClicked += Tm_DropDownItemClicked;
            tm.DropDownItems.AddRange(group.Select(w => new ToolStripMenuItem(w.Name)).ToArray<ToolStripItem>());
            contextMenuStripMain.Items.Add(tm);
        }

不管怎么说,没有你我是不会这么做的。谢谢

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34858677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档