Как перебрать дочерние формы

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Как перебрать дочерние формы

Сообщение vvs_adm » 31.03.2005 (Чт) 22:35

Извините, некогда искать, тороплюсь. Может скажете раньше, чем я сам найду... У меня создаются новые дочерние формы по типу Dim as new frmForma. Т.е. у них же у всех одинаковое имя. Как мне из них выбрать форму, у которой к примеру Caption равен Nashli ну и например сделать ей show...

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 31.03.2005 (Чт) 23:39

Переборка дочерних форм - EnumChildWindows (пример в API Guide)
Определение заголовка форм - GetWindowText (см. там же).
Век живи - век учись!
www.detal-plast.narod.ru

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 31.03.2005 (Чт) 23:58

Чудик
Не-е-е-е... Мне не это надо... У меня есть MDI форма и создаются чилдрены (ну и корявый же этот русский язык :)), а создаются так, как я уже описал. Пока что я, как дурак, редимлю массив переменных типа Object , и в массиве храню ссылки на всех чилдренов... Тока вот при изничтожении того самого пасынка такая жопа, извините, начинается некрасивая... Зато при добавлении нового все хорошо :) А так бы хотелось что-то типа
Код: Выделить всё
For Each frmTemp in ChildForms
  If frmTemp.Caption="То, что надо" Then
    MsgBox "Так вот же она"
    Exit нафиг
  End If
Next frmTemp


P.S.: и SetFocus бы потом этой партизанке

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 01.04.2005 (Пт) 0:05

Чудик писал(а):Переборка дочерних форм - EnumChildWindows (пример в API Guide)
Определение заголовка форм - GetWindowText (см. там же).


А EnumChildWindows я терпеть не могу за неоправданную необходимость выносить процедуру EnumChild в другой модуль... Всегда, когда можно, я использую GetWindow... И не таскаю за собой лишний модуль... Но это касается только модулей класса, в которых нужно окна перечислять... В других случаях по настроению :)

Inferno
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 26.01.2005 (Ср) 1:06

Сообщение Inferno » 01.04.2005 (Пт) 0:46

А не проще создавать формы через массив

Код: Выделить всё
Private Sub Form_Load()
Dim a(4) As Object
Set a(0) = New test
Set a(1) = New test
Set a(2) = New test
Set a(3) = New test
MsgBox a(3).Caption
End Sub

test- имя формы

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 01.04.2005 (Пт) 1:04

Ну в моем случае не проще... А минимум так же... Проблема не в том, что мне ужасно влом массив объектов редимить, а в том, что при убийстве средней, а не последней формы, встают два варианта : либо забить на дырку, и следующую форму создавать со следующим индексом, либо с внутренним, освободившемся индексом. В каждом из вариантов свои минусы и ни одного плюса :(

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 01.04.2005 (Пт) 7:21

Ну так не массив делай, а коллекцию.
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 01.04.2005 (Пт) 7:35

alibek писал(а):Ну так не массив делай, а коллекцию.


Дык они-же и так есть в коллекции! Зачем их еще куда-то помещать?

Вообще можно в Tag писать признак формы и потом перебирая коллекцию находить форму с нужным признаком - это все-ж удобней чем по части Caption. В чем проблема-то?
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 01.04.2005 (Пт) 7:37

В коллекции Forms будут все загруженные формы, не только MDIChild. А так будет своя коллекция, только с теми элементами, которые нужны.
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 01.04.2005 (Пт) 7:46

alibek писал(а):В коллекции Forms будут все загруженные формы, не только MDIChild. А так будет своя коллекция, только с теми элементами, которые нужны.


Ну сделать проверку навроде

Код: Выделить всё
For Each f In Forms
    If f Is MyForm Then
         ...
    End IF
Next f


совсем не сложно. Общее кол-во форм в любом случае небольшое, так что никакого влияния на быстродействие кол-во элементов в коллекции не окажет. И проще оно...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 01.04.2005 (Пт) 10:10

Andrey FedorovНу так я и спрашивал, можно ли так делать :)
Код: Выделить всё
For Each f In Forms
    If f Is MyForm Then
         ...
    End IF
Next f
Тока я уже и так знаю, что коллекция так и называется Forms :) Но все равно спасибо

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 01.04.2005 (Пт) 10:13

alibek писал(а):В коллекции Forms будут все загруженные формы, не только MDIChild. А так будет своя коллекция, только с теми элементами, которые нужны.

Бред. Зачкаешься отслеживать целостность и достоверность данных в такой коллекции. Проще вот так:
Код: Выделить всё
dim F as Form
for each F in Forms
  if typeof F is frm_MyMDIChildForm then
    ' We got 'em
  endif
next F


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 181

    TopList