Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.05.2014, 23:41   #1
dima1257
Пользователь
 
Аватар для dima1257
 
Регистрация: 16.11.2012
Сообщений: 66
По умолчанию Как пройти по всем элементам MenuStrip?

Добрый вечер.

Пытаюсь пройти по всем элементам меню. После 4х часов проб и ошибок нашел вот такой код:
Код:
foreach (ToolStripMenuItem mainItem in menuStrip1.Items)
            {
                MessageBox.Show(mainItem.Name);
                foreach (ToolStripItem menuItem in mainItem.DropDownItems)
                {
                    MessageBox.Show(menuItem.Name);
                }
            }
Но он проходит по только по самим названиям меню и по подменю, а глубже соответственно не заходит.

Если написать this. то после точки можно обратиться например к ФайлToolStripMenuItem, а вот рекурсивным циклом по всем контролам попасть на эти меню не получается.

Попробовал
Код:
ArrayList st2 = ArrayList.Adapter(menuStrip1.Items);
в st2 попадает коллекция только основного меню т.е. например Файл и Вид.

Покажите пожалуйста как получить все элементы со всеми дочерними.
Выдержка из правил форума: Не стоит отправлять в поиск, не хотите отвечать пройдите мимо. Хотите помочь, пишите конкретный ответ.
dima1257 вне форума Ответить с цитированием
Старый 08.05.2014, 11:41   #2
nedel
Пользователь
 
Регистрация: 09.04.2014
Сообщений: 18
По умолчанию

Код:
...
IterateMenuItems(menuStrip1.Items); //вызов метода, который пройдет по всех унктах меню
...
void IterateMenuItems(ToolStripItemCollection items)
        {
            foreach (ToolStripItem item in items)
            {
                MessageBox.Show(item.Name);
                if(item is ToolStripDropDownItem) 
                    IterateMenuItems(((ToolStripDropDownItem)item).DropDownItems); //рекурсивный вызов
            }
        }
nedel вне форума Ответить с цитированием
Старый 08.05.2014, 12:57   #3
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
рекурсивным циклом по всем контролам попасть на эти меню не получается
для этого надо этот самый рекурсивный написать
eval вне форума Ответить с цитированием
Старый 13.05.2014, 09:27   #4
dima1257
Пользователь
 
Аватар для dima1257
 
Регистрация: 16.11.2012
Сообщений: 66
По умолчанию

Всем спасибо. остановился на таком решении. А вообще хотелось бы сериализовать меню и сохранить в xml.

Код:
Rec(mstr.Items, down => { collectMenuStrip += down.Name + "#"; }); // вызов

static void Rec(IEnumerable collection, Action<ToolStripMenuItem> ccAction)
        {
            foreach (var mainItem in collection)
            {
                ccAction((ToolStripMenuItem)mainItem);
                Rec(((ToolStripMenuItem)mainItem).DropDownItems, ccAction);
            }
        }
Выдержка из правил форума: Не стоит отправлять в поиск, не хотите отвечать пройдите мимо. Хотите помочь, пишите конкретный ответ.
dima1257 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вывести на экран значение элемента MenuStrip? IgorDaiko C# (си шарп) 3 03.07.2012 00:35
как пройти по двумерному массиву realgleb Общие вопросы C/C++ 9 10.05.2012 21:36
Как пройти по всем ComboBox и узнать их Text ? Noor Помощь студентам 2 19.03.2010 18:41
Как присвоить значение max всем элементам стоящим после него? Defa4ka Помощь студентам 9 13.11.2009 18:37