Форум программистов, компьютерный форум, киберфорум
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/117: Рейтинг темы: голосов - 117, средняя оценка - 4.77
197 / 197 / 5
Регистрация: 24.07.2010
Сообщений: 1,311
1

Проблема с меню: Коллекция была изменена; невозможно выполнить операцию перечисления

20.04.2012, 14:11. Показов 21402. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, не могу понять вообще что происходит 0_о, вот код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    private static TreeView mainMenu = new TreeView();
 
    public static void LoadMainMenu()
    {
       //Тут мы заносим данные в mainMenu 
    }
 
    public static void LoadMainMenuInTree(TreeView targetTree)
    {
        foreach (TreeNode m in mainMenu.Nodes)
        {
            targetTree.Nodes.Add(m);
        }
    }
и тут вот выдает ошибку "Коллекция была изменена; невозможно выполнить операцию перечисления." и ругается на цикл форич, я не понимаю какого фига вообще переменная mainMenu меняется, подскажите плз)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.04.2012, 14:11
Ответы с готовыми решениями:

Невозможно выполнить операцию перечисления
Всем доброго времени суток! Возникла проблема, ни как не могу понять ее природу. Коллекция была...

Невозможно выполнить операцию перечисления. Коллекция была изменена
Доброго времени суток! Возникла такая ошибка - при добавлении элемента в очередь (таймер постоянно...

Коллекция была изменена; невозможно выполнить операцию перечисления
Добрый день! Явственно не понимаю одну штуку. Ситуация такая: Есть поток, который собирает...

Коллекция была изменена; невозможно выполнить операцию перечисления
Здравствуйте, все не могу разобраться, где допустил ошибку. Выполняемый код:

9
185 / 185 / 53
Регистрация: 10.04.2009
Сообщений: 491
20.04.2012, 14:17 2
нельзя изменять коллекцию в которой ходишь foreach-ем
0
197 / 197 / 5
Регистрация: 24.07.2010
Сообщений: 1,311
20.04.2012, 14:18  [ТС] 3
Так я и не трогаю коллекцию, по которой форичем иду, я в другое дерево добавляю ведь!!! Присмотрись к коду - я добавляю в дерево, которое в параметрах передал
0
185 / 185 / 53
Регистрация: 10.04.2009
Сообщений: 491
20.04.2012, 15:08 4
пробуй
C#
1
2
3
4
foreach (TreeNode node in from)
{
to.Nodes.Add(node.Clone());
}
0
197 / 197 / 5
Регистрация: 24.07.2010
Сообщений: 1,311
20.04.2012, 15:48  [ТС] 5
Щас походу начинаю понимать в чем прикол был, тут с запросом к базе чудеса творятся, как разберусь отпишу)

Добавлено через 33 минуты
Просто чудеса какие-то:
Заменил форич на
C#
1
2
3
4
 for (int i = 0; i < mainMenu.Nodes.Count; i++)
        {
           targetTree.Nodes.Add(mainMenu.Nodes[i]);
        }
При этом, когда происходит
C#
1
 targetTree.Nodes.Add(mainMenu.Nodes[i]);
то студия не копирует из mainMenu, а как будто вырезает, и мы не копируем значение, а переносим с одного дерево в другое.....

Добавлено через 1 минуту
И кстати, Clone не дает сделать, нет метода такого у тринода

Добавлено через 3 минуты
Пока решил вот так:
C#
1
2
3
4
 foreach (TreeNode m in mainMenu.Nodes)
        {
            targetTree.Nodes.Add(new TreeNode(m.Text,m.Value,m.ImageUrl,m.NavigateUrl,m.Target));
        }
0
2735 / 2041 / 380
Регистрация: 22.07.2011
Сообщений: 7,731
20.04.2012, 16:00 6
Тут вся фича в том что TreeNode это веб контрол, и когда ты добовляешь его в другой веб контрол то просто происходит перенос в иерархии контролов.
Это аналогично примеру:
C#
1
2
3
4
            Label lbl = new Label();
            PlaceHolder1.Controls.Add(lbl);
            PlaceHolder2.Controls.Add(PlaceHolder1.Controls[0]);
            int Count = PlaceHolder1.Controls.Count;
0
197 / 197 / 5
Регистрация: 24.07.2010
Сообщений: 1,311
20.04.2012, 16:00  [ТС] 7
Так ведь прикол то в том, что я копировал из контрола, который не на странице был)
0
2735 / 2041 / 380
Регистрация: 22.07.2011
Сообщений: 7,731
20.04.2012, 16:14 8
Это без разницы, так работает ControlCollection )


C#
1
2
3
4
5
6
7
8
protected internal virtual void AddedControl(Control control, int index)
{
   if (control._parent != null) //если родитель у контрола есть то сразу удаляет из его коллекции.
    {
        control._parent.Controls.Remove(control);
    }
    control._parent = this;// в любом случае задает родителя и потом всеравно удаляет )
...
1
197 / 197 / 5
Регистрация: 24.07.2010
Сообщений: 1,311
20.04.2012, 16:24  [ТС] 9
Мда, веселенький способ, с какими только шишками не столкнешься...)
0
3 / 3 / 2
Регистрация: 20.07.2014
Сообщений: 654
20.02.2019, 04:12 10
Проблема следующая

Запускаю приложение
Логинюсь

Захожу в форму
Потом в этой форме нажимаю Exit

и попадаю на ошибку
приложил фото



C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
private void registerUserToolStripMenuItem_Click(object sender, EventArgs e)
        {
            RegisterUser objRegisterUser = new RegisterUser();
            objRegisterUser.MdiParent = this;
            objRegisterUser.Show();
        }
 
        private void PayrollMDI_FormClosing(object sender, FormClosingEventArgs e)
 
        {
            DialogResult objDialog = MessageBox.Show("Are you sure you want to exit this application", "Form Closing...", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (objDialog == DialogResult.No)
            {
                e.Cancel = true;
 
            }
 
            else
 
            {
                e.Cancel = false;
                Login objLogIn = new Login();
                objLogIn.Visible = true;
            }
        }


C#
1
2
3
4
5
6
7
8
9
10
11
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                Application.Exit();
            }
            catch (Exception E)
            {
 
                MessageBox.Show(E.Message, "Ошибка");
            }
Подскажите, пожалуйста, что можно было бы сделать, чтобы этого избежать, а оставлять просто форму логин - пароль после выхода из StripMenuItem
Миниатюры
Проблема с меню: Коллекция была изменена; невозможно выполнить операцию перечисления  
0
20.02.2019, 04:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.02.2019, 04:12
Помогаю со студенческими работами здесь

Коллекция была изменена; невозможно выполнить операцию перечисления
foreach (VigruzkaSpecZvan s in massiv._VigruzkaSpecZvan) { ...

Коллекция была изменена; невозможно выполнить операцию перечисления
Проблема очень простая, иду foreach 'ем по коллекции в которую в это же время добавляю элементы,...

Коллекция была изменена; невозможно выполнить операцию перечисления
Подскажите пожалуйста, почему так происходит. Выполняю такой код: foreach (Signal signal in...

Коллекция была изменена, невозможно выполнить операцию перечисления
как бороться с ошибкой &quot;Коллекция была изменена, невозможно выполнить операцию перечисления&quot; при...

Коллекция была изменена; невозможно выполнить операцию перечисления. Как бороться?
Добрый день. Выполняю такой код: public void redraw_grid() { if...

"Коллекция была изменена" - там, где она не была изменена
Непойму что за глюканы творятся... Код: while (sitemapUrls.Count != sitemapUrlsChecks.Count) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru