如果我在菜单树的不同区域运行代码,我只得到一个元素,你将如何首先将此逻辑应用于此菜单树的所有子组件,其次,说明整个树。
我的代码只显示了每个区域的1个阶段
MessageBox.Show((ToolStripMenuItem).ToString());
所以上面只显示文件或保存或打开,而不是文件打开或文件保存。
我是否应该将foreach用于我的工具线程?
答案 0 :(得分:1)
我们说MenuStrip
ToolStripMenuItem
fileToolStripMenuItem
File
(文字New
),其子项Open
和Open
}。此外,From file
有Recent
和File
。要访问所有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;
等等添加检查以避免空异常。