0 / 0 / 0
Регистрация: 30.04.2020
Сообщений: 7
1

Цикл по кнопкам на панели не всегда бежит по всем кнопкам

22.07.2020, 09:48. Показов 1697. Ответов 4

Добрый день!

Есть форма, на ней три панели, на двух из которых создается динамически 22 кнопки (по 11 на каждой панели). В случае когда пользователь в настройках (из модальной формы) включает или выключает кнопки, у меня на главной форме требуется пересоздать все кнопки с учетом новых настроек. Соответственно я бегу циклом по всем кнопкам, удаляю их и потом уже создаю заново. Проблема в том, что в цикле почему-то не всегда обрабатываются все кнопки на панели, ощущение что обработка идет через одну кнопку. Не пойму с чем это связано, что не так может быть в моем коде?
Код цикла:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
    foreach (Panel panel in Controls.OfType<Panel>())
    {
        foreach (Button button in panel.Controls.OfType<Button>())
        {
            Controls.Remove(button);
            button.Dispose();
        }                   
    }

При этом кол-во кнопок считает правильно на панели.
Вышел из положения так
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
    foreach (Panel panel in Controls.OfType<Panel>())
    {
        while(panel.Controls.OfType<Button>().Count() > 0)
        {
            foreach (Button button in panel.Controls.OfType<Button>())
            {
                Controls.Remove(button);
                button.Dispose();
            }
        }       
    }


Но хотелось бы понять почему в цикл не попадают все кнопки, может кто подскажет?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.07.2020, 09:48
Ответы с готовыми решениями:

Задать обработчик всем кнопкам
Нужно всем кнопкам назначить определенный обработчик. Как это сделать? Отдельный класс создавать...

Обратиться ко всем кнопкам в форме
Здравствуйте, долго рылся в интернете, но так и ничего не нашел private void button_Click(object...

Обращение ко всем кнопкам во WrapPanel
Всем привет! Столкнулся с проблемой, в моем проекте необходимо изменить цвет на всех кнопках,...

Задать всем кнопкам IsEnabled = False
Помогите пожалуйста реализовать такую процедуру, чтобы можно было определённой группе кнопок...

4
1433 / 837 / 313
Регистрация: 17.05.2015
Сообщений: 3,215
22.07.2020, 09:53 2
Лучший ответ Сообщение было отмечено Akelow как решение

Решение

Akelow, вместо этого
foreach (Button button in panel.Controls.OfType<Button>())
нужен цикл for от последней контрола до первого, т.е. в обратном порядке
1
0 / 0 / 0
Регистрация: 30.04.2020
Сообщений: 7
22.07.2020, 10:04  [ТС] 3
Рядовой, спасибо большое! Буду делать через for, считал что foreach не должен пропускать объекты если они удовлетворяют условиям отбора.
0
1433 / 837 / 313
Регистрация: 17.05.2015
Сообщений: 3,215
22.07.2020, 11:05 4
Лучший ответ Сообщение было отмечено Akelow как решение

Решение

Akelow, вы коллекцию Controls меняете на ходу. Меняются индексы элементов и т.д.. Вот и косяки.
1
0 / 0 / 0
Регистрация: 30.04.2020
Сообщений: 7
22.07.2020, 11:19  [ТС] 5
Рядовой, спасибо еще раз!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.07.2020, 11:19

Задать всем кнопкам один атрибут
У меня есть 13 кнопок и как задать общие атбибуты для всех кнопок? чтоб не прописывать в каждой...

Обращение ко всем кнопкам на странице документа Word
На странице Word документа есть около 10 кнопок. Как мне с помощью VBA обратиться ко всем этим...

Обратиться ко всем кнопкам что есть на форме поочерёдно
А как можно обойти все кнопки что есть на форме? Вот захотелось мне написать универсальную функцию...

Необходимо разом обратится ко всем кнопкам на форме и задать им одинаковые свойства
Добрый день, занимаюсь своим дипломом и возникла проблема решение которой у меня есть, но оно...

Цикл для задания ActionListener кнопкам
Здравствуйте, осваиваю java и решил написать калькулятор. Если не вдаваться в подробности кода то...

Обращение к кнопкам
Допустим есть большая программа, в ней 3 кнопки в каждой почти весь текст одинаковый. Хочу сделать...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.