Ссылка в форме на “родитель класс”

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

Ссылка в форме на “родитель класс”

Сообщение Avtopic » 13.12.2007 (Чт) 16:45

Здравствуйте!

каждый экземпляр класса “A” создает свой экземпляр формы “В”.
Можно или нет в экземпляре формы получить ссылку на соответствующий “A”

Спасибо!

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

Сообщение alibek » 13.12.2007 (Чт) 16:52

При создании B передавай в него ссылку на A.
Только при выгрузке B не забудь вначале обнулить ссылку.
Lasciate ogni speranza, voi ch'entrate.

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 13.12.2007 (Чт) 17:15

Ну, если предам понятно, что буду иметь ссылку, но, как передать?
мне надо чтобы в форм лоад уже имел ссылку. И хотел без глобальной переменной...

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 13.12.2007 (Чт) 17:22

В Form_Load без глобальной не получится. Или без дьявольских ухищрений :)

ЗЫ: Хотя с ухищрениями тоже не получится. Форма загружается при обращению к любому ее свойству.
Последний раз редактировалось Antonariy 13.12.2007 (Чт) 17:24, всего редактировалось 1 раз.
Лучший способ понять что-то самому — объяснить это другому.

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

Сообщение alibek » 13.12.2007 (Чт) 17:22

Да как хочешь, так и передавай.
Можешь через события родительского или подчиненного класса, можешь через Friend-своство или метод.
Но в Form_Load ты ссылку не получишь, разве что будешь ее запрашивать прямо в этой процедуре.
Lasciate ogni speranza, voi ch'entrate.

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

Сообщение alibek » 13.12.2007 (Чт) 17:24

Antonariy писал(а):В Form_Load без глобальной не получится. Или без дьявольских ухищрений :)

Да не такие уж и дъявольские ухищрения, всего то raiseevent.
Но friend-метод на потомке проще.
Lasciate ogni speranza, voi ch'entrate.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 13.12.2007 (Чт) 17:31

Да, про событие забыл. А насчет потомка не понял.
Лучший способ понять что-то самому — объяснить это другому.

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 13.12.2007 (Чт) 18:01

А я ипро RaiseEvent не понял.
Private WithEvents что-то As А
вед здесь “что-то” не тот экземпляр сласса А который создал форму, и соответственно его евенты не перехватывает.
или я что-то туплю?

Avtopic
Постоялец
Постоялец
 
Сообщения: 442
Зарегистрирован: 30.09.2005 (Пт) 17:15
Откуда: Tbilisi

Сообщение Avtopic » 13.12.2007 (Чт) 20:21

А вот на счет friend-метода понял, спасибо!

nat-z
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 18.11.2006 (Сб) 19:58

Re: Ссылка в форме на “родитель класс”

Сообщение nat-z » 14.12.2007 (Пт) 2:36

Avtopic писал(а):Здравствуйте!
каждый экземпляр класса “A” создает свой экземпляр формы “В”.
Можно или нет в экземпляре формы получить ссылку на соответствующий “A”
Спасибо!



Я не поняла, о чем здесь говорят, но, возможно, про то же, что и я ищу? Мне надо в форме узнать имя материнской (порождающей)формы, откуда произошел вызов.

У меня одна из форм (например, FORM_2) в программе может вызываться из различных форм. И имена этих форм используются в самой FORM_2. Например, при работе этой FORM_2 надо присвоить form_1.text1.text = “ssssss”. Как написать такой оператор присвоения, если form_1 – это имя формы, откуда произошел вызов и внутри самой form_2 он неизвестен?
И вглубь туда же по этому вопросу.
Опять же из различныx форм FORM_1a, FORM_1b … и т.д. возможна загрузка этой моей формы FORM_2, причем она может загружаться как при двойном клике на каком-то поле, так и при клике на например Picture.
Как узнать имя и тип элемента материнской формы FORM_1x, из которой произошел вызов дочерней формы FORM_2?
Как, например, написать form_2.left= form1_1x.text1.left + 3000, когда надо определить имя вызывающей формы (form1_x) и имя элемента, по которому было обращение (клик или двойной клик, вобщем, он был в фокусе – text1)?

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

Сообщение alibek » 14.12.2007 (Пт) 9:24

ClassA родитель, ClassB потомок.
Через friend-процедуру (самодельные конструкторы/деструкторы):
Код: Выделить всё
'ClassA

...

Sub SomeProcedure(...)
...
  Dim objChild As ClassB
  Set objChild = New ClassB
  objChild.Create Me
  ...
  objChild.Release
  Set objChild = Nothing
...
End Sub

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

Private objParent As ClassA

Private Sub Class_Initializa()
  'nothing
End Sub

Private Sub Class_Terminate()
  Release
End Sub

Friend Sub Create(Parent As ClassA)
  Set objParent = Parent
End Sub

Friend Sub Release()
  Set objParent = Nothing
End Sub


Через событие на потомке:
Код: Выделить всё
'ClassA

Private WithEvent Children As ClassB

Private Sub Children_GetParent(Ref As ClassA)
Set Ref = Me
End Sub

Sub SomeProcedure(...)
...
  Set Children = New ClassB
  ...
  Children.Release
  Set Children = Nothing
...
End Sub

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

Private objParent As ClassA

Public Event GetParent(ByRef Ref As ClassA)

Private Sub Class_Initializa()
  Create
End Sub

Private Sub Class_Terminate()
  Release
End Sub

Friend Sub Create()
  RaiseEvent GetParent(objParent)
End Sub

Friend Sub Release()
  Set objParent = Nothing
End Sub
Последний раз редактировалось alibek 14.12.2007 (Пт) 9:26, всего редактировалось 1 раз.
Lasciate ogni speranza, voi ch'entrate.

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

Re: Ссылка в форме на “родитель класс”

Сообщение alibek » 14.12.2007 (Пт) 9:25

nat-z, тебе надо при создании формы FORM2 передавать в нее ссылку на родителя одним из методов.
Lasciate ogni speranza, voi ch'entrate.

nat-z
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 18.11.2006 (Сб) 19:58

Re: Ссылка в форме на “родитель класс”

Сообщение nat-z » 14.12.2007 (Пт) 17:08

alibek писал(а):nat-z, тебе надо при создании формы FORM2 передавать в нее ссылку на родителя одним из методов.

Какие методы?

Я вот тупо вижу только какую-то глоб. переменную REG=xxx присвоить значение, а в дочерней форме так же тупо сделать DO CASE по значению REG.
Неужели нельзя короче и красивее?
--------------------------------------------
И если допустим я как-то получила имя формы nameform="FORM1", имя textbox nametext="TEXT1", то как в VB пишется оператор присвоения типа x=FORM1.text1.text, чтобы вместо form1,text1 использовать переменные nameform, nametext???


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

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

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

    TopList