Цикл по подпунктам в меню
Ну, я попробовал это:
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;
}
}
private void button2_Click_1(object sender, EventArgs e)
{
List<ToolStripMenuItem> allItems = new List<ToolStripMenuItem>();
foreach (ToolStripMenuItem toolItem in menuStrip1.Items)
{
allItems.Add(toolItem);
MessageBox.Show(toolItem.Text);
allItems.AddRange(GetItems(toolItem));
}
}
но я только получаю File
, Edit
, View
мне нужно достичь Export
(см. рисунок) и его subitem
и, возможно, изменить видимость Word
например.
Обратите внимание form
изменяет menustrip
пункт динамически, поэтому мне нужно перебрать их.
2 ответа
Решение
Основываясь на предоставленной вами информации, вы можете использовать linq как
var exportMenu=allItems.FirstOrDefault(t=>t.Text=="Export");
if(exportMenu!=null)
{
foreach(ToolStripItem item in exportMenu.DropDownItems) // here i changed the var item to ToolStripItem
{
if(item.Text=="Word") // as you mentioned in the requirements
item.Visible=false; // or any variable that will set the visibility of the item
}
}
надеюсь, что это поможет вам
С уважением
Чтобы получить все пункты меню (экземпляры ToolStripMenuItem) в вашем MenuStrip, используйте следующий код (я предполагаю, что имя MenuStrip - menuStrip1)
// Get all the top menu items, e.g. File , Edit and View
List<ToolStripMenuItem> allItems = new List<ToolStripMenuItem>();
foreach (ToolStripMenuItem item in menuStrip1.Items)
{
// For each of the top menu items, get all sub items recursively
allItems.AddRange(GetItems(item));
}