Неявно определить дочерние формы родительской формы

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Source
Постоялец
Постоялец
 
Сообщения: 351
Зарегистрирован: 04.09.2007 (Вт) 11:21

Неявно определить дочерние формы родительской формы

Сообщение Source » 24.10.2007 (Ср) 16:42

Дана родительская форма frmParent. Как неявно (не указывая конкретные имена) определить все её дочерние формы, чтобы выгрузить их?

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 24.10.2007 (Ср) 17:06

Код: Выделить всё
    Dim f As Form
    For Each f In VB.Forms
        If GetParent(f.hWnd) = frmParent.hWnd Then
            Unload f
        End If
    Next f
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Source
Постоялец
Постоялец
 
Сообщения: 351
Зарегистрирован: 04.09.2007 (Вт) 11:21

Сообщение Source » 24.10.2007 (Ср) 18:13

странно, но GetParent возвращает всегда 0. Может, надо вызывать SetParent, но frmChild.Show , Me должен тоже работать!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 24.10.2007 (Ср) 18:31

Может, надо вызывать SetParent

Ни в коем случае.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 24.10.2007 (Ср) 18:36

Так попробуй:
Код: Выделить всё
Dim f as form
For each f in Forms
   If f.hwnd <> frmParent.hwnd then Unload f
Next

А код, приведенный выше и будет возвращать 0.
Подпись проходит рефакторинг

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 24.10.2007 (Ср) 19:29

Lumen
Код приведённый BV - верный.
Твой код - неверный.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Source
Постоялец
Постоялец
 
Сообщения: 351
Зарегистрирован: 04.09.2007 (Вт) 11:21

Сообщение Source » 24.10.2007 (Ср) 19:49

код Lumen будет работать когда в проекте 1 родитель, остальные дети. Код BV универсальнее. Но всё же не работает :( Мож флаги надо какие указывать при показе формы?
Вложения
GetParent.zip
(1.34 Кб) Скачиваний: 38

Source
Постоялец
Постоялец
 
Сообщения: 351
Зарегистрирован: 04.09.2007 (Вт) 11:21

Сообщение Source » 25.10.2007 (Чт) 8:16

мда... При SetParent получается интересный эффект. Но GetParent всё равно возращает 0 :) Вот, господа, мы и допрограммились :)

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 25.10.2007 (Чт) 9:43

Замени GetParent на GetWindowLong GWL_HWNDPARENT
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;


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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 63

    TopList  
cron