如果我在菜单树的不同区域运行代码,我只得到一个元素,首先如何将这个逻辑应用到这个菜单树的所有子组件中,其次,说明整个树。
我的代码只显示了应用的每个区域的一个阶段。
MessageBox.Show((ToolStripMenuItem).ToString());因此,上述内容只显示“文件”或“保存”或“打开”,而不是“文件打开”或“文件保存”。
我应该在我的工具项目中使用一个程序吗?
发布于 2021-05-03 10:29:14
最后,我在下面的语法中使用了一个逻辑,然后在最后构建字符串
ToolStripMenuItem ThisMenuItem = (ToolStripMenuItem)sender;
string WhatClicked = ThisMenuItem.ToString();
ToolStripMenuItem ThisMenuItemOwnerItem = (ToolStripMenuItem)(ThisMenuItem.GetCurrentParent() as ToolStripDropDown).OwnerItem;那么你显然可以用更深的
ToolStripMenuItem ThisOwnersOwnerItem = (ToolStripMenuItem)(ThisMenuItemOwnerItem.GetCurrentParent() as ToolStripDropDown).OwnerItem;等等,添加检查以避免空异常。
发布于 2017-03-27 20:36:20
假设我有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;
}
}
}
}该方法获取第一级菜单项并返回IEnumerable<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));
}编辑:在我看到关于OP的想法是从MenuStrip获取所有项目的评论之后,下面是一个例子。
我编写了其他方法,以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)希望这能有所帮助。
https://stackoverflow.com/questions/43054814
复制相似问题