Переход-Форма-Форма

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 01.08.2008 (Пт) 13:13

Для того, чтобы ссылка на экземпляр формы оставалась доступной, можно сделать так:
Код: Выделить всё
Код удален, поскольку скопирован неправильно. Правильный вариант см. ниже.

Можно организовать ChildForm как массив и хранить все ссылки на созданные кнопкой дочерние формы. Более усложненно манипуляции с взаимодействием окон можно наблюдать в примере.
Вложения
child-parent.zip
Взаимодействие окон. Исправленный код.
(1 Кб) Скачиваний: 31
Последний раз редактировалось Денис 01.08.2008 (Пт) 14:42, всего редактировалось 1 раз.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

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

Сообщение alibek » 01.08.2008 (Пт) 13:25

Денис писал(а):Для того, чтобы ссылка на экземпляр формы оставалась доступной, можно сделать так:
Код: Выделить всё
Private ChildForm as Form
________________________________________________________

Private Sub Command1_Click()

  Dim Copia As Form     'Объявляем переменную типа Form
  Dim Copia2 As Form

  Set Copia = New Form1 'Создаем экземпляр класса Form1
  Set Copia2 = Copia

    Load Copia          'Загружаем экземпляр
    Copia.Show          'Выводим на экран
 
  Set ChildForm = Copia 'Назначаем копию переменной.
  Set Copia = Nothing   'Уничтожаем ссылку на экземпляр формы (сам он остается в памяти)

End Sub


Это на конкурс по извращениям?
Почему бы просто не написать:
Код: Выделить всё
Set ChildForm  = New Form1
Load ChildForm
ChildForm .Show
Lasciate ogni speranza, voi ch'entrate.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 01.08.2008 (Пт) 13:27

alibek
Потому что так мы из первого экземпляра получаем ссылку на второй экземпляр и можем обращаться ко всем его публичным методам.
_____________
Ой, и так можем... Ой, чёта я действительно нагородил огород... :shock:
Последний раз редактировалось Денис 01.08.2008 (Пт) 13:34, всего редактировалось 1 раз.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

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

Сообщение alibek » 01.08.2008 (Пт) 13:29

Денис писал(а):Потому что так мы из первого экземпляра получаем ссылку на второй экземпляр

А?
Lasciate ogni speranza, voi ch'entrate.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 01.08.2008 (Пт) 13:41

alibek
Блин, я перепутал свой код с посторонним. Вот что я на самом деле хотел добавить:
Код: Выделить всё
Private ChildForm as Form
________________________________________________________

Private Sub Command1_Click()

  Dim Copia As Form     'Объявляем переменную типа Form

  Set Copia = New Form1 'Создаем экземпляр класса Form1
    Load Copia          'Загружаем экземпляр
    Copia.Show          'Выводим на экран
  Set ChildForm = Copia 'Назначаем копию переменной.
  Set Copia = Nothing   'Уничтожаем ссылку на экземпляр формы (сам он остается в памяти)

End Sub


Теперь переделываем его в соответствии с твоей рекомендацией:

Код: Выделить всё
Private ChildForm as Form
________________________________________________________

Private Sub Command1_Click()

  Set ChildForm = New Form1 'Создаем экземпляр класса Form1
    Load ChildForm          'Загружаем экземпляр
    ChildForm.Show          'Выводим на экран

End Sub
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 01.08.2008 (Пт) 13:59

Денис, вот последний вариант и есть правильный для случая, когда ссылку надо хранить. Безо всяких лишних промежуточных переменных.
Весь мир матрица, а мы в нем потоки байтов!

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 03.08.2008 (Вс) 21:57

Ребят. Я тут задавал вопрос не совсем по этому поводу. Я именл в виду уже готовую форму - со всеми элиментами управлениями и т.д.
Пишите жизнь на чистовик.....переписать не удастся.....

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Сообщение Proxy » 03.08.2008 (Вс) 22:25

Сори, это я наоффтопил опять. Извините пожалуйста, я больше так не буду. Весь оффтоп опять с моего поста начат( Йа креведко :(
Follow the white rabbit.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 04.08.2008 (Пн) 8:14

SLIM
Да все по теме. Просто тебе надо взаимодействие между двумя формами, а мы тут обсуждали взаимодействие между экземплярами одной формы, принципы работы те же.
Вот более подходящий тебе пример:

Код: Выделить всё

'Этот код находится в Form1!

Private frmForm2 as Form2
________________________________________________________

Private Sub Command1_Click()

  Set frmForm2 = New Form2 'Создаем экземпляр класса Form1
    Load frmForm2          'Загружаем экземпляр
   
    'Раскомментируй нужную строку:
    frmForm2.Show          'Выводим на экран (получаем отдельное окно)
    'frmForm2.Show 0, me    'Выводим на экран (зависимое немодальное)
    'frmForm2.Show 1, me    'Выводим на экран (зависимое модальное)

    'Чтобы скрыть форму
    frmForm2.Hide

    'Чтобы выгрузить форму из пямяти
    Unload frmForm2
   
    'Для модальных форм все это не нужно, ибо код в основной (родительской) форме приостанавливается до полной выгрузки модального окна.
    'чтобы передать параметры в дочернюю форму - юзай публичные переменные в ней. Чтобы вернуть значения из формы, юзай публичные переменные в родительской форме, а в дочерней заведи публичную переменную типа Form и передавай ей ссылку на родительскую форму.
End Sub
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 04.08.2008 (Пн) 20:48

Денис Давай попорядку. Есть Форма1. В ней при загрузке из БД вытягвается некий список. Есть Форма2, из которой собственно загружается Форма1. Вот в таком случае представь код для примера. Как я задам ссылку на существующую форму...
Пишите жизнь на чистовик.....переписать не удастся.....

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 05.08.2008 (Вт) 10:20

SLIM
А причем тут БД?
Когда ты в форме №2 делаешь Load Form1, то форма №1 загружается и генерирует событие Form_Load. Вот и выполняй все необходимые действия там. И у каждого экземпляра формы будет свой экземпляр события со своим экземпляром рекордсета
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 05.08.2008 (Вт) 23:57

Да БД тут просто пример. Просто при загрузке формы нужно проверять наличие данных в БД, и если их нет, то выгрузить либо отменить загрузку формы.
Пишите жизнь на чистовик.....переписать не удастся.....

Пред.

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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 52

    TopList  
cron