powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Контролы на форме и контролы в GroupBox
15 сообщений из 15, страница 1 из 1
Контролы на форме и контролы в GroupBox
    #32772389
dnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dnt
Гость
Как сделать так, чтобы при выполнении
Dim aControl as System.Windows.Forms.Controls
For Each aControl in Me.Controls
..................................
обрабатывались все контролы лежащие на форме, В ТОМ ЧИСЛЕ и те которые сгрупированы в рамке GroupBox.
Сейчас все контролы в GroupBox игнорируются и обрабатываются только те ято на форме. Если написать:
For Each aControl in Me.GroupBox1.Controls
то обрабатываются только те что в GroupBox. А мне нужно чтобы обрабаьывались все.
Может поможете.
Спасибо
dnt
...
Рейтинг: 0 / 0
Контролы на форме и контролы в GroupBox
    #32772449
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рекурсией ...
Т.е. обходя все контролы в For Each aControl in Me.Controls
если встречается контрол типа GroupBox или другой контейнер, вызвать метод еще раз, передав в него в к-ве параметров коллекцию контролов из этого контейнера
...
Рейтинг: 0 / 0
Контролы на форме и контролы в GroupBox
    #32772457
dnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dnt
Гость
Спасибо, а можно пару строчек кода высказанного метода рекурсия применительно к данному случаю.

Спасибо
dnt
...
Рейтинг: 0 / 0
Контролы на форме и контролы в GroupBox
    #32772479
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dntСпасибо, а можно пару строчек кода высказанного метода рекурсия применительно к данному случаю.

Спасибо
dnt
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Resursion(Me.Controls)
    End Sub

    Private Sub Resursion(ByVal coll As System.Windows.Forms.Control.ControlCollection)
        Dim control As System.Windows.Forms.Control
        For Each control In coll
            If TypeOf control Is System.Windows.Forms.GroupBox Then
                Resursion(CType(control, System.Windows.Forms.GroupBox).Controls())
            End If
            MsgBox(control.Name)
        Next
    End Sub
...
Рейтинг: 0 / 0
Контролы на форме и контролы в GroupBox
    #32772514
dnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
dnt
Гость
Большое спасибо. Жалко что это дело нельзя реализовать как то попроще, скажем чтобы при надобности GroupBox "теряло" свое предназначение контейнера и превращалась в обычную обрамляющую рамку а следовательно ее контролы автоматом были бы контролами основной формы. Ну это я так, фантазирую, скажем о свойстве (гипотетическом) Container (true/false) который можно было бы переключать.
Еще раз благодарю
dnt
...
Рейтинг: 0 / 0
Контролы на форме и контролы в GroupBox
    #32772572
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, так между прочим, хочу предупредить, что использование for..each конечно выглядит красиво, но эту конструкцию не желательно использовать, по скоросным характеристикам простой for будет работать быстрее. Кроме того, есть еще очень важное замечание - многоие любят писать так
Код: plaintext
1.
2.
3.
 for i as integer =  0  to MyCollection.Count -  1 
   .....
 end for
такой код тоже не желателен так как во время прохода каждого цикла компилятор определяет условие выхода из цикла вызывая каждый раз MyCollection.Count.
Правильно будет написать
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
for i as integer = MyCollection.Count to  0  step - 1 
   .....
end for

'либо

dim ub as Integer
ub = MyCollection.Count -  1 
 for i as integer =  0  to ub
   .....
 end for

это конечно всё мое субъективное мнение - каждый делает как считает нужным...
...
Рейтинг: 0 / 0
Контролы на форме и контролы в GroupBox
    #32772588
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, так между прочим, хочу предупредить, что использование for..each конечно выглядит красиво, но эту конструкцию не желательно использовать, по скоросным характеристикам простой for будет работать быстрее.

Я раньше тоже так думал (вернее читал о таких результатах), но после нескольких своих тестов пришел к выводу что в DOTNET конструкция for...each работает быстрее. В любом случае разница между ними минимальна. Так что ИМХО в этом случае не стоит заморачиваться на for.
...
Рейтинг: 0 / 0
Контролы на форме и контролы в GroupBox
    #32772593
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sa
Я раньше тоже так думал (вернее читал о таких результатах), но после нескольких своих тестов пришел к выводу что в DOTNET конструкция for...each работает быстрее. В любом случае разница между ними минимальна. Так что ИМХО в этом случае не стоит заморачиваться на for.
for...each работает быстрее?!! Так ведь он пораждает код реализации цикла через интерфейс IEnumerator, это уж точно, по-моему, будет тормознутей чем через прямую организацию цикла, все знают как .нет плохо работает с вызовом виртуальных методов...
...
Рейтинг: 0 / 0
Контролы на форме и контролы в GroupBox
    #32772597
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
только что проверил собственноручно - for..each работает на порядок медленнее
...
Рейтинг: 0 / 0
Контролы на форме и контролы в GroupBox
    #32772602
Один1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лиман Артёмтолько что проверил собственноручно - for..each работает на порядок медленнее Можно на тест посмотреть ? Особо интересует утверждение "на порядок", т.е в 10 раз
...
Рейтинг: 0 / 0
Контролы на форме и контролы в GroupBox
    #32772605
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Один1 Лиман Артёмтолько что проверил собственноручно - for..each работает на порядок медленнее Можно на тест посмотреть ? Особо интересует утверждение "на порядок", т.е в 10 раз

пожалуйста

Код: plaintext
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.
26.
27.
28.
 Dim col As New Collection

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        For i As Int32 =  0  To  100000 
            col.Add(i)
        Next
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim t As Long = Now.Ticks

        Dim v As Int32
        For Each i As Int32 In col
            v = i
        Next

        MsgBox("done in " + (Now.Ticks - t).ToString + " tiсks")
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim ub As Int32 = col.Count -  1 
        Dim t As Long = Now.Ticks
        Dim v As Int32
        For i As Int32 =  0  To ub
            v = i
        Next
        MsgBox("done in " + (Now.Ticks - t).ToString + " tiсks")
    End Sub
...
Рейтинг: 0 / 0
Контролы на форме и контролы в GroupBox
    #32772606
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если интересует железо:
C2200/512/XP
...
Рейтинг: 0 / 0
Контролы на форме и контролы в GroupBox
    #32772608
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
приношу извинение, но забыл в тест с for вкючить выбор значения из коллекции v = col.Item(i). Да так вроде почти одинаково работают...
...
Рейтинг: 0 / 0
Контролы на форме и контролы в GroupBox
    #32772679
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да так вроде почти одинаково работают...

Так как подсчет через Tick не совсем точный, то небольшой разницей можно пренебречь ;-)

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Контролы на форме и контролы в GroupBox
    #32772782
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже несколько раз встречал утверждения авторов книг по .NET, что конструкция
For Each
Next
и инициализация переменных вместе с их объявлением
теперь работает быстро.
for i as integer = 0 to MyCollection.Count - 1
Где-то читал даже про это, что как и в Borland - компиляторах к MyCollection.Count - 1 будет обращение лишь один раз. Если честно я этому всему не очень верил пока не прочитал этот топик.
Спасибо всем участникам.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Контролы на форме и контролы в GroupBox
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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