У меня есть WinForm с меню, как это:не удается получить все пункты подменю в WinForm в C#
File==>Add==>New Project
File==>Add==>Existing Project
File==>Open
File==>Exit
Edit==>Copy
Edit==>Cut
Help==>View Help
Help==>About
Я хочу, чтобы текст всех пунктов меню и пунктов подменю.
Я попробовал этот код:
for (int i = 0; i < menuStrip1.Items.Count; i++)
{
foreach (ToolStripMenuItem item in ((ToolStripMenuItem)menuStrip1.Items[i]).DropDownItems)
{
textBox1.Text += item.OwnerItem.Text + @"==>" + item.Text + Environment.NewLine;
}
}
и это приводит к:
File==>Add
File==>Open
File==>Exit
Edit==>Copy
Edit==>Cut
Help==>View Help
Help==>About
, как это показывает, что он не показывает все пункты подменю. Я попробовал этот код:
for (int i = 0; i < menuStrip1.Items.Count; i++)
{
for (int j = 0; j < ((ToolStripMenuItem) menuStrip1.Items[i]).DropDownItems.Count; j++)
{
foreach (ToolStripMenuItem item in (ToolStripMenuItem)menuStrip1.Items[i]).DropDownItems[j]))
{
textBox1.Text += item.OwnerItem.Text + @"==>" + item.Text + Environment.NewLine;
}
}
}
, но он дает эту ошибку:
foreach statement cannot operate on variables of type 'System.Windows.Forms.ToolStripItem' because 'System.Windows.Forms.ToolStripItem' does not contain a public definition for 'GetEnumerator'
Примечание: Я ищу общее решение (для произвольного числа пункт меню и произвольное количество вложенных пунктов подменю) не только для этой проблемы.
Заранее спасибо.
Я использовал рекурсию, но это приводит к «stackoverflow» – BlueFlower
Вот почему вам нужно проверить на завершение. В коде, который я добавил в свой ответ, который является автоматическим - если 'c.Controls' пуст - он никогда не вызывает' GetText (c2) '. – User42
Я использовал рекурсию во внутреннем methed, но это приводит к «stackoverflow», и я протестировал ваш метод, но он не работает. вы протестировали свое решение? можете ли вы предоставить мне свое решение в деталях? спасибо – BlueFlower