Max*_*Max 4 c# foreach menustrip visual-studio
我想所有的SubItems我的MenuStrip,所以我可以一次改变它们.
我正在尝试以下内容,但它们不起作用:
foreach (ToolStripMenuItem toolItem in menuStrip1.DropDownItems)
{
//Do something with toolItem here
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我编写一个有利于从中foreach loop获取所有数据的好处吗?SubMenuItems(DropDownItems)MenuStrip
编辑现在尝试使用以下内容Recursive method:
private void SetToolStripItems(ToolStripItemCollection dropDownItems)
{
try
{
foreach (object obj in dropDownItems)
{
if (obj.GetType().Equals(typeof(ToolStripMenuItem)))
{
ToolStripMenuItem subMenu = (ToolStripMenuItem)obj;
if (subMenu.HasDropDownItems)
{
SetToolStripItems(subMenu.DropDownItems);
}
else
{
}
}
}
}
catch
{
}
}
Run Code Online (Sandbox Code Playgroud)
试试这个:
List<ToolStripMenuItem> allItems = new List<ToolStripMenuItem>();
foreach (ToolStripMenuItem toolItem in menuStrip.Items)
{
allItems.Add(toolItem);
//add sub items
allItems.AddRange(GetItems(toolItem));
}
private IEnumerable<ToolStripMenuItem> GetItems(ToolStripMenuItem item)
{
foreach (ToolStripMenuItem dropDownItem in item.DropDownItems)
{
if (dropDownItem.HasDropDownItems)
{
foreach (ToolStripMenuItem subItem in GetItems(dropDownItem))
yield return subItem;
}
yield return dropDownItem;
}
}
Run Code Online (Sandbox Code Playgroud)
修改淡水河谷的答案。分隔符不会使这个版本崩溃,它们也会被返回( menuStripItems 是一个 ToolStripItemCollection。即: this.MainMenuStrip.Items ):
/// <summary>
/// Recursively get SubMenu Items. Includes Separators.
/// </summary>
/// <param name="item"></param>
/// <returns></returns>
private IEnumerable<ToolStripItem> GetItems(ToolStripItem item)
{
if (item is ToolStripMenuItem)
{
foreach (ToolStripItem tsi in (item as ToolStripMenuItem).DropDownItems)
{
if (tsi is ToolStripMenuItem)
{
if ((tsi as ToolStripMenuItem).HasDropDownItems)
{
foreach (ToolStripItem subItem in GetItems((tsi as ToolStripMenuItem)))
yield return subItem;
}
yield return (tsi as ToolStripMenuItem);
}
else if (tsi is ToolStripSeparator)
{
yield return (tsi as ToolStripSeparator);
}
}
}
else if (item is ToolStripSeparator)
{
yield return (item as ToolStripSeparator);
}
}
Run Code Online (Sandbox Code Playgroud)
填充一个列表:
List<ToolStripItem> allItems = new List<ToolStripItem>();
foreach (ToolStripItem toolItem in menuStripItems)
{
allItems.Add(toolItem);
//add sub items
allItems.AddRange(GetItems(toolItem));
}
Run Code Online (Sandbox Code Playgroud)
循环列表:
foreach(ToolStripItem toolItem in allItems)
{
if(toolItem is ToolStripMenuItem)
{
ToolStripMenuItem tsmi = (toolItem as ToolStripMenuItem);
//Do something with it
}
else if(toolItem is ToolStripSeparator)
{
ToolStripSeparator tss = (toolItem as ToolStripSeparator);
//Do something with it
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22582 次 |
| 最近记录: |