使用ToString捕获整个ToolStripMenu树

时间:2017-03-27 19:25:34

标签: c# toolstripmenu

如果我在菜单树的不同区域运行代码,我只得到一个元素,你将如何首先将此逻辑应用于此菜单树的所有子组件,其次,说明整个树。

我的代码只显示了每个区域的1个阶段

  MessageBox.Show((ToolStripMenuItem).ToString());

所以上面只显示文件或保存或打开,而不是文件打开或文件保存。

我是否应该将foreach用于我的工具线程?

2 个答案:

答案 0 :(得分:1)

我们说MenuStrip ToolStripMenuItem fileToolStripMenuItem File(文字New),其子项OpenOpen }。此外,From fileRecentFile。要访问所有ToolStripMenuItems private IEnumerable<ToolStripMenuItem> GetChildToolStripItems(ToolStripMenuItem parent) { if (parent.HasDropDownItems) { foreach (ToolStripMenuItem child in parent.DropDownItems) { yield return child; foreach (var nextLevel in GetChildToolStripItems(child)) { yield return nextLevel; } } } } (它的子女),您需要递归方法,该方法遍历所有级别(访问儿童,孙子......)

IEnumberable<ToolStripMenuItem>

此方法采用第一级菜单项并返回var list = GetChildToolStripItems(fileToolStripMenuItem); ,然后您可以遍历它(获取名称,更改某些属性等)。

像这样使用:

New, Open, From File, Recent

在我的示例中,这将返回子项集合,如下所示:MessageBox

您可以轻松浏览收藏并获取项目文字(以MessageBox.Show(string.Join(", ", list.Select(x=>x.Text).ToArray())) 显示,如下所示:

foreach (ToolStripMenuItem menuItem in list)
{
    MessageBox.Show(string.Format("item named: {0}, with text: {1}", menuItem.Name, menuItem.Text));
}

或者,如果您愿意,可以这样:

MenuStrip

编辑:在我看到评论OP的想法是从MenuStrip获取所有项目之后,这里就是一个例子。

我写了另外的方法,以ToolStripMenuItems为参数,遍历所有GetChildToolStripItems并为每个项目调用private List<ToolStripMenuItem> GetAllMenuStripItems(MenuStrip menu) { List<ToolStripMenuItem> collection = new List<ToolStripMenuItem>(); foreach (ToolStripMenuItem item in menu.Items) { collection.Add(item); collection.AddRange(GetChildToolStripItems(item)); } return collection; } 方法。返回所有顶级项目以及所有子项和大孩子的列表...

 var allItems = GetAllMenuStripItems(menuStrip1)

用法:

 .Include(entity => entity.NavigationProperty)
 .ThenInclude(navigationProperty.NestedNavigationProperty)

希望这有帮助。

答案 1 :(得分:0)

最后我使用了围绕以下语法的逻辑,然后在最后构建字符串

ToolStripMenuItem ThisMenuItem = (ToolStripMenuItem)sender;
string WhatClicked = ThisMenuItem.ToString();
ToolStripMenuItem ThisMenuItemOwnerItem = (ToolStripMenuItem)(ThisMenuItem.GetCurrentParent() as ToolStripDropDown).OwnerItem;

然后你显然可以更深入

ToolStripMenuItem ThisOwnersOwnerItem = (ToolStripMenuItem)(ThisMenuItemOwnerItem.GetCurrentParent() as ToolStripDropDown).OwnerItem;

等等添加检查以避免空异常。