我有一个contextMenuStrip,它在数据库中生成动态表单数据。数据库中的数据有一个组列,我想使用它为应用程序动态创建Sub菜单。我的问题是,它创建了重复的子菜单项目,我希望它分组。
这是我的名单和建设者。
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视图,而不仅仅是显示名称。
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,它给了我重复的组,在那里,我试图过滤它,但没有运气。希望我说得通。
发布于 2016-01-18 16:21:45
您可以使用LINQ对对象进行分组:
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属性。
发布于 2016-01-19 12:20:59
谢谢勒内·沃格特。我修正了如果在我读你的答案之前,但我还是想跟你一起去。
这是您的修补程序,我刚刚为子菜单添加了一个单击事件。
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>());
}这是我的修正,但它是一样的。
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);
}不管怎么说,没有你我是不会这么做的。谢谢
https://stackoverflow.com/questions/34858677
复制相似问题