Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Ukrajinec
1 / 1 / 1
Регистрация: 06.04.2009
Сообщений: 164
#1

Объясните, что делает этот код? - C#

08.06.2016, 12:08. Просмотров 261. Ответов 8
Метки нет (Все метки)

Доброго времени суток!
Читаю вот эту тему Выделить все CheckBox!. Отвечающий уже как 3 года тут не показывается, поэтому прошу помощи у вас. Помогите разобратся в коде, а то со справкой как-то не очень у меня это сделать получается...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 foreach (Control gb in this.Controls)
            {
                if (gb.GetType().ToString().IndexOf("GroupBox")>-1)
                {
                    foreach (Control che in gb.Controls)
                    {
                        if (che.GetType().ToString().IndexOf("CheckBox") > -1)
                        {
                            CheckBox che1 = (CheckBox)che;
                            che1.Checked = true;
                        }
                    }
                }
            }
Здесь мы объявляем переменную gb типа Control, которая будет что-то делать в этой форме с Control-ами?
C#
1
 foreach (Control gb in this.Controls)
Тут ищем первое вхождение со строкой "GroupBox"? Почему условие ">-1"?
C#
1
 if (gb.GetType().ToString().IndexOf("GroupBox")>-1)
Это выражение совсем не понял...
C#
1
CheckBox che1 = (CheckBox)che;
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2016, 12:08
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Объясните, что делает этот код? (C#):

Что делает этот код?
for (i=0; i<game_get_count(game); i++) { if (user =...

Что делает этот код?
Здравствуйте. Объясните, пожалуйста, как работает этот код? Если можно,...

Что делает этот код?
private List<Visual> visuals = new List<Visual>(); protected override Visual...

Что делает этот код?
Доброго времени суток уважаемые форумчане. Наткнулся в интернете на код...

Что делает этот код с Invoke()?
Здрасте , что делает этот код Invoke(new...

8
OwenGlendower
Супер-модератор
Эксперт .NET
8743 / 7747 / 3317
Регистрация: 17.03.2014
Сообщений: 15,241
Записей в блоге: 1
08.06.2016, 12:34 #2
Лучший ответ Сообщение было отмечено Ukrajinec как решение

Решение

Ukrajinec, вот код с комментариями:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Цикл по всем элементам управления формы
foreach (Control gb in this.Controls)
{
    // Получаем имя типа элемента управления - gb.GetType().ToString()
    // Затем проверяем есть ли в имени типа строка GroupBox
    // IndexOf возвращает позицию найденной строки. Если строка не найдена, то метод вернет -1
    if (gb.GetType().ToString().IndexOf("GroupBox")>-1)
    {
        // Цикл по всем элементам управления внутри GroupBox
        foreach (Control che in gb.Controls)
        {
            // Проверяем содержит ли имя типа элемента управления строку CheckBox
            if (che.GetType().ToString().IndexOf("CheckBox") > -1)
            {
                // Т.к. мы уже убедились что в переменной che хранится значение типа CheckBox,
                //    то выполняем приведение значения переменной che к типу CheckBox
                CheckBox che1 = (CheckBox)che;
                che1.Checked = true;
            }
        }
    }
}

Пользоваться этим кодом не надо т.к. он плохо написан. Проверять типы значений с помощью строковых операций неправильно и неэффективно. Код лучше переписать так:
C#
1
2
3
4
5
6
7
foreach (GroupBox gb in this.Controls.OfType<GroupBox>())
{
    foreach (CheckBox cb in gb.Controls.OfType<CheckBox>())
    {
        cb.Checked = true;
    }
}
1
Ukrajinec
1 / 1 / 1
Регистрация: 06.04.2009
Сообщений: 164
08.06.2016, 12:47  [ТС] #3
Огромное вам спасибо!

Добавлено через 9 минут
OwenGlendower, Я еще подскажите, а то додуматся не могу... У меня есть 3 групбокса, в которых очень много чекбосов. Как выделить все чек-боксы в одном конкретном груп-боксе?
0
OwenGlendower
Супер-модератор
Эксперт .NET
8743 / 7747 / 3317
Регистрация: 17.03.2014
Сообщений: 15,241
Записей в блоге: 1
08.06.2016, 12:50 #4
Ukrajinec, будет лучше если ты сам додумаешься. Смотри код в моем прошлом сообщении.
0
Ukrajinec
1 / 1 / 1
Регистрация: 06.04.2009
Сообщений: 164
08.06.2016, 12:52  [ТС] #5
OwenGlendower, ок, но если мои мозги сломаются - это будет на вашей совести!
0
Ukrajinec
1 / 1 / 1
Регистрация: 06.04.2009
Сообщений: 164
08.06.2016, 13:04  [ТС] #6
OwenGlendower, еще позволю себе вам понадоедать.. =)
Смотрите, решил я вручную вбить этот код (так ко мне лучше доходит). Создал функцию и результат на первом скрине.
Тогда я скопипастил ваш код и результат на втором скрине. Я не там пишу?
0
Миниатюры
Объясните, что делает этот код?   Объясните, что делает этот код?  
OwenGlendower
Супер-модератор
Эксперт .NET
8743 / 7747 / 3317
Регистрация: 17.03.2014
Сообщений: 15,241
Записей в блоге: 1
08.06.2016, 13:10 #7
Ukrajinec, метод OfType<T>() это метод расширения (extension method) объявленный в классе System.Linq.Enumerable. По правилам C# такой метод будет виден только после добавления директивы using
C#
1
using System.Linq;
Цитата Сообщение от Ukrajinec Посмотреть сообщение
решил я вручную вбить этот код (так ко мне лучше доходит)
Правильно делаешь
1
Ukrajinec
1 / 1 / 1
Регистрация: 06.04.2009
Сообщений: 164
08.06.2016, 18:22  [ТС] #8
OwenGlendower, Сделал! Работает, спасибо за направление, вы очень мне помогли!
C#
1
2
3
4
5
6
7
8
9
10
11
 public void Checkbox_num()
        {
            foreach (GroupBox gb in Controls.OfType<GroupBox>())
            {
                if (gb.Name.Contains("groupBox_numbers"))
                    foreach (CheckBox cb in gb.Controls.OfType<CheckBox>())
                    {
                        cb.Checked = true;
                    }
            }
        }
0
OwenGlendower
Супер-модератор
Эксперт .NET
8743 / 7747 / 3317
Регистрация: 17.03.2014
Сообщений: 15,241
Записей в блоге: 1
08.06.2016, 18:34 #9
Ukrajinec, пожалуйста. Твой код, кстати, можно упростить. При добавлении элемента управления на форму создается переменная с её именем. В данном случае groupBox_numbers.
C#
1
2
3
4
5
6
7
public void Checkbox_num()
{
    foreach (CheckBox cb in groupBox_numbers.Controls.OfType<CheckBox>())
    {
        cb.Checked = true;
    }
}
0
08.06.2016, 18:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2016, 18:34
Привет! Вот еще темы с решениями:

Опишите вкратце, что делает этот код
Здравствуйте.Помогите в словах описать работу данного кода.Какие...

Объясните этот код
Объясните пожалуйста кусок кода Passagir pas1 = listView1.SelectedItems.Tag as...

Объясните, что делает строка кода
МОжете объяснить что делает эта строка: string digits =...

Объясните как работает этот код
using System; namespace RealisationOfToDo { public class MyClass ...


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

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

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