Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / заполнение формы нулями / 6 сообщений из 6, страница 1 из 1
16.10.2014, 16:02
    #38778807
voffkamc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заполнение формы нулями
На форме есть почти десяток GroupBox в которые программно добавляются textbox'ы и label'ы. Необходимо каждый из них перебрать. Сейчас это делаю перебирая каждый их GroupBox слуд. образом:
Код: vbnet
1.
2.
3.
4.
5.
For Each controls As Control In GroupBoxCanaPr.Controls
       If TypeOf (controls) Is System.Windows.Forms.TextBox Then
           abrakadabra(controls)
       End If
Next


писать эти строки относительно каждой группы - как-то хреново получается. Подскажите каким образом доработать эту функцию, чтобы подсовывать ей только названия групп, а дальше она сама перебирала?
...
Рейтинг: 0 / 0
16.10.2014, 16:27
    #38778843
voffkamc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заполнение формы нулями
Уже сам допер, простите за беспокойство. Может нужно будет кому-то:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
    For Each GroupBoxCntrol As Control In Me.Controls
            If TypeOf GroupBoxCntrol Is GroupBox Then
                For Each controls As Control In GroupBoxCntrol.Controls
                    If TypeOf (controls) Is System.Windows.Forms.TextBox Then
                        abrakadabra(controls)
                    End If
                Next
            End If
        Next
...
Рейтинг: 0 / 0
16.10.2014, 16:55
    #38778899
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заполнение формы нулями
voffkamcУже сам допер, простите за беспокойство. Может нужно будет кому-то:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
    For Each GroupBoxCntrol As Control In Me.Controls
            If TypeOf GroupBoxCntrol Is GroupBox Then
                For Each controls As Control In GroupBoxCntrol.Controls
                    If TypeOf (controls) Is System.Windows.Forms.TextBox Then
                        abrakadabra(controls)
                    End If
                Next
            End If
        Next



выкинь на помойку, используй рекурсию
например так
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public static IEnumerable<Control> GetControls(this Control parent, Func<Control, bool> predicate=null)
        {
            return
                parent.Controls.OfType<Control>()
                    .SelectMany(c => GetControls(c))
                    .Concat(new[] { parent })
                    .Where(c => predicate == null || predicate(c));
        }
...
Рейтинг: 0 / 0
16.10.2014, 22:30
    #38779180
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заполнение формы нулями
pationвыкинь на помойку, используй рекурсию

Какой бы не был короткий и всемогущий линкью, но классический перебор и читается лучше и по быстродействию не хуже, как минимум для этой задачи.
...
Рейтинг: 0 / 0
16.10.2014, 23:17
    #38779202
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заполнение формы нулями
VSVLAD,
ну рекурсия тут более чем уместна и Linq с рекурсией вообще никак не связан, можете добавить 3 параметром екшен
и не возвращать перечисления, вообще то самое уместное забандить все на модель и не плодить кучу говнокода, и прозрачно чисто понятно. И конечно присоединяюсь к вопросу, если текстбоксы добавляются программно - почему им при инициализации не присвоить
начальное значение 0?
...
Рейтинг: 0 / 0
17.10.2014, 08:47
    #38779369
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
заполнение формы нулями
Где-то в степи,

если он их программно добавляет, что мешает их всех в коллекции размещать, например?
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / заполнение формы нулями / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]