2016-08-24 6 views
-1

Мне нужно получить любой дочерний элемент ToolStrip/MenuStrip/StatusStrip для перевести тексты.C# | Как получить все дочерние элементы ToolStrip?

Я сделал это с элементами управления простой рекурсией, но я не знаю, как это сделать с элементами ToolStrip, потому что в классе ToolStripItem нет свойства DropDownItems.

+1

Если вы хотите получить ответ на вопрос по стеку. не сбрасывайте общую проблему, предоставляйте минимальный, полный проверяемый пример и читайте наши строки для проводки –

+0

Возможный дубликат элементов [Enumerate .Net control в общем виде (MenuStrip, ToolStrip, StatusStrip)] (http://stackoverflow.com/questions/297335/enumerate-net-controls-items-generically-menustrip-toolstrip-statusstrip) –

ответ

0

Я написал это, и он хорошо работает.

private ToolStripItem[] GetAllChildren(ToolStripItem item) 
    { 
     List<ToolStripItem> Items = new List<ToolStripItem> { item }; 
     if (item is ToolStripMenuItem) 
      foreach (ToolStripItem i in ((ToolStripMenuItem)item).DropDownItems) 
       Items.AddRange(GetAllChildren(i)); 
     else if (item is ToolStripSplitButton) 
      foreach (ToolStripItem i in ((ToolStripSplitButton)item).DropDownItems) 
       Items.AddRange(GetAllChildren(i)); 
     else if (item is ToolStripDropDownButton) 
      foreach (ToolStripItem i in ((ToolStripDropDownButton)item).DropDownItems) 
       Items.AddRange(GetAllChildren(i)); 
     return Items.ToArray(); 
    } 
+0

Это избыточно. Общий базовый класс - это '' ToolStripDropDownItem' '(https://msdn.microsoft.com/en-us/library/system.windows.forms.toolstripdropdownitem (v = vs.110) .aspx), а 'DropDownItems' - это свойство общего базового класса. Вы можете удалить тесты типа и использовать тот же код для вставки в массив. – Jasen

+0

Спасибо! Это то, что я искал :) – user6466445