Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Контролы на форме и контролы в GroupBox / 15 сообщений из 15, страница 1 из 1
08.11.2004, 13:34
    #32772389
dnt
dnt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контролы на форме и контролы в GroupBox
Как сделать так, чтобы при выполнении
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
08.11.2004, 14:28
    #32772449
Alexey Kudinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контролы на форме и контролы в GroupBox
Рекурсией ...
Т.е. обходя все контролы в For Each aControl in Me.Controls
если встречается контрол типа GroupBox или другой контейнер, вызвать метод еще раз, передав в него в к-ве параметров коллекцию контролов из этого контейнера
...
Рейтинг: 0 / 0
08.11.2004, 14:34
    #32772457
dnt
dnt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контролы на форме и контролы в GroupBox
Спасибо, а можно пару строчек кода высказанного метода рекурсия применительно к данному случаю.

Спасибо
dnt
...
Рейтинг: 0 / 0
08.11.2004, 14:48
    #32772479
Alexey Kudinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контролы на форме и контролы в GroupBox
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
08.11.2004, 15:08
    #32772514
dnt
dnt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контролы на форме и контролы в GroupBox
Большое спасибо. Жалко что это дело нельзя реализовать как то попроще, скажем чтобы при надобности GroupBox "теряло" свое предназначение контейнера и превращалась в обычную обрамляющую рамку а следовательно ее контролы автоматом были бы контролами основной формы. Ну это я так, фантазирую, скажем о свойстве (гипотетическом) Container (true/false) который можно было бы переключать.
Еще раз благодарю
dnt
...
Рейтинг: 0 / 0
08.11.2004, 19:25
    #32772572
Лиман Артём
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контролы на форме и контролы в GroupBox
кстати, так между прочим, хочу предупредить, что использование 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
08.11.2004, 19:56
    #32772588
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контролы на форме и контролы в GroupBox
кстати, так между прочим, хочу предупредить, что использование for..each конечно выглядит красиво, но эту конструкцию не желательно использовать, по скоросным характеристикам простой for будет работать быстрее.

Я раньше тоже так думал (вернее читал о таких результатах), но после нескольких своих тестов пришел к выводу что в DOTNET конструкция for...each работает быстрее. В любом случае разница между ними минимальна. Так что ИМХО в этом случае не стоит заморачиваться на for.
...
Рейтинг: 0 / 0
08.11.2004, 20:09
    #32772593
Лиман Артём
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контролы на форме и контролы в GroupBox
Sa
Я раньше тоже так думал (вернее читал о таких результатах), но после нескольких своих тестов пришел к выводу что в DOTNET конструкция for...each работает быстрее. В любом случае разница между ними минимальна. Так что ИМХО в этом случае не стоит заморачиваться на for.
for...each работает быстрее?!! Так ведь он пораждает код реализации цикла через интерфейс IEnumerator, это уж точно, по-моему, будет тормознутей чем через прямую организацию цикла, все знают как .нет плохо работает с вызовом виртуальных методов...
...
Рейтинг: 0 / 0
08.11.2004, 20:20
    #32772597
Лиман Артём
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контролы на форме и контролы в GroupBox
только что проверил собственноручно - for..each работает на порядок медленнее
...
Рейтинг: 0 / 0
08.11.2004, 20:30
    #32772602
Один1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контролы на форме и контролы в GroupBox
Лиман Артёмтолько что проверил собственноручно - for..each работает на порядок медленнее Можно на тест посмотреть ? Особо интересует утверждение "на порядок", т.е в 10 раз
...
Рейтинг: 0 / 0
08.11.2004, 20:43
    #32772605
Лиман Артём
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контролы на форме и контролы в GroupBox
Один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
08.11.2004, 20:44
    #32772606
Лиман Артём
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контролы на форме и контролы в GroupBox
если интересует железо:
C2200/512/XP
...
Рейтинг: 0 / 0
08.11.2004, 20:53
    #32772608
Лиман Артём
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контролы на форме и контролы в GroupBox
приношу извинение, но забыл в тест с for вкючить выбор значения из коллекции v = col.Item(i). Да так вроде почти одинаково работают...
...
Рейтинг: 0 / 0
09.11.2004, 02:56
    #32772679
Sa
Sa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Контролы на форме и контролы в GroupBox
Да так вроде почти одинаково работают...

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

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


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