:: Visual Foxpro, Foxpro for DOS
Обратиться к кантролу вызывающей формы.
vodaic
Автор

Сообщений: 188
Откуда: Киев, Украина
Дата регистрации: 24.02.2009
Есть экранная форма 1. Из нее вызывается форма2. Можно ли из кантрола формы 2 обратиться к кантролу формы 1, то есть, к кантролу вызывающей формы?
Ratings: 0 negative/0 positive
Re: Обратиться к кантролу вызывающей формы.
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
Можно.

Теперь уточняющий вопрос: с какой целью, что в итоге хочется получить?


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Обратиться к кантролу вызывающей формы.
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
Передать через параметры, например, сам объект форма 1 в форму 2
Можно через Public-переменную, что считается не камильфо, можно через Private, через св-во _screen'a
Ratings: 0 negative/0 positive
Re: Обратиться к кантролу вызывающей формы.
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
На этом сайте есть статьи.
Люди писали, пытались помочь начинающим.
Советую их прочесть.
Там ОЧЕНЬ подробно разобран ваш случай.

Делается все просто
в коде вызывающего контрола
do SomeForm with thisform
В SomeForm свойство - LinkFrm = .null.
В Init SomeForm
param tLink
this.LinkFrm=tLink

Далее в любом контроле SomeForm
thisform.LinkFrm.SomeMethod()

Это принцип работы с объектами. При чем практически для все языков)


------------------
Ratings: 0 negative/0 positive
Re: Обратиться к кантролу вызывающей формы.
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
Ydin
Передать через параметры, например, сам объект форма 1 в форму 2
+100500
Ydin
Можно через Public-переменную, что считается не камильфо, можно через Private, через св-во _screen'a
А это то зачем? (((


------------------
Ratings: 0 negative/0 positive
Re: Обратиться к кантролу вызывающей формы.
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
Те же яйца, но в профиль
Ratings: 0 negative/0 positive
Re: Обратиться к кантролу вызывающей формы.
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Нет, не те же. Даже совсем другие. И даже не яйца, а большая и волосатая Ж**А.

Автору вопроса. Не следует связывать формы на уровне контролов. Следует связать их на уровне собственно форм (т.е. передать из одной в другую, и запомнить в свойстве ссылку именно на форму). И следует сделать в форме свой метод (с параметрами, если надо данные передавать), который и вызывать из другой формы (или не формы - это уже не будет иметь значения) - а уже из этого метода и манипулировать визуальным объектом на ЭТОЙ же форме.

P.S. Всё же более привычно писать в транскрипции control как кОнтрол, а не кАнтрол, несмотря на произношение близкое к безударному а, или даже к э


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Обратиться к кантролу вызывающей формы.
vodaic
Автор

Сообщений: 188
Откуда: Киев, Украина
Дата регистрации: 24.02.2009
PaulWist
Можно.
Теперь уточняющий вопрос: с какой целью, что в итоге хочется получить?

Трудно ответить на этот вопрос. Но я постараюсь.
На форме есть 2 Command, каждый из которых выполняет свои функции. Возникла надобность, чтобы оба Command выполнялись последовательно друг за другом без вмешательства пользователя. Но в Command1
строится своя экранная форма и там выполняются действия. По выполнению этих действий желательно запустить Command2 начальной формы. Но для активной формы Command2 уже не является Thisform.Command2. Вот и спрашиваю, как же мне запустить Command2?
Ratings: 0 negative/0 positive
Re: Обратиться к кантролу вызывающей формы.
vodaic
Автор

Сообщений: 188
Откуда: Киев, Украина
Дата регистрации: 24.02.2009
Аспид
На этом сайте есть статьи.
Люди писали, пытались помочь начинающим.
Советую их прочесть.
Там ОЧЕНЬ подробно разобран ваш случай.

Спасибо за ссылку. Но по анонсам статей я не смог определить интересующую меня.
Может Вы сможете написать мне ссылку на подобный моему случай?

Заранее благодарен.
Ratings: 0 negative/0 positive
Re: Обратиться к кантролу вызывающей формы.
vodaic
Автор

Сообщений: 188
Откуда: Киев, Украина
Дата регистрации: 24.02.2009
Igor Korolyov
Нет, не те же. Даже совсем другие. И даже не яйца, а большая и волосатая Ж**А.
Автору вопроса. Не следует связывать формы на уровне контролов. Следует связать их на уровне собственно форм (т.е. передать из одной в другую, и запомнить в свойстве ссылку именно на форму). И следует сделать в форме свой метод (с параметрами, если надо данные передавать), который и вызывать из другой формы (или не формы - это уже не будет иметь значения) - а уже из этого метода и манипулировать визуальным объектом на ЭТОЙ же форме.

P.S. Всё же более привычно писать в транскрипции control как кОнтрол, а не кАнтрол, несмотря на произношение близкое к безударному а, или даже к э

Спасибо за ответ. Но не смог полностью "въехать" в предлагаемый Вами механизм. А нет ли у Вас статьи на подобную тему? Или может быть есть фрагмент кода с подобными передачами параметров?

Спасибо!
Ratings: 0 negative/0 positive
Re: Обратиться к кантролу вызывающей формы.
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Для начала убрать всю логику из Click кнопок (лучше вообще из форм). Потом смотреть ЧТО нужно для этой самой логики, и каким образом можно это что-то (данные из текстбокса, или из некоторой записи некоторой таблицы) передать в обрабатывающий код НЕ завязываясь на том что "они там в text1456 на frm9654 введены".
Формы могут вызвать такую логику, НЕ формы, а твой "автомат" может вызвать эту же логику - всё просто, прозрачно и очевидно.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Обратиться к кантролу вызывающей формы.
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
vodaic
PaulWist
Можно.
Теперь уточняющий вопрос: с какой целью, что в итоге хочется получить?

Трудно ответить на этот вопрос. Но я постараюсь.
На форме есть 2 Command, каждый из которых выполняет свои функции. Возникла надобность, чтобы оба Command выполнялись последовательно друг за другом без вмешательства пользователя. Но в Command1
строится своя экранная форма и там выполняются действия. По выполнению этих действий желательно запустить Command2 начальной формы. Но для активной формы Command2 уже не является Thisform.Command2. Вот и спрашиваю, как же мне запустить Command2?

Добавьте в свою форму такой метод:
Procedure DoCommand()
LPARAMETERS tcCase
DO CASE
CASE tcCase == 'Command1'
* Перенести сюда код из Command1.Click
CASE tcCase == 'Command2'
* Перенести сюда код из Command2.Click
***
CASE tcCase == 'CommandN'
* Можно добавлять сколь угодно процедур
ENDCASE

В кнопках в Click оставьте только вызовы типа:
THISFORM.DoCommand('Command1')
И морока с кнопками и контролами у вас навсегда пропадет.

Для вызова методов первой формы из второй добавьте во вторую форму свойство вроде 'oParentForm'.
В коде вызова второй формы из первой форму добавьте еще строку:
loForm2.oParentForm = THISFORM
И тогда из второй формы вызывайте нужный вам метод из первой формы:
THISFORM.oParentForm.DoCommand('Command1')
Примерно так.



Исправлено 1 раз(а). Последнее : lulgu, 03.03.18 15:41
Ratings: 0 negative/0 positive
Re: Обратиться к кантролу вызывающей формы.
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
vodaic
Может Вы сможете написать мне ссылку на подобный моему случай?
А то что я привел в первом своем посте, чем то не устраивает?
Или что то не поняли?
Спрашивайте что не ясно)))

lulgu
Для вызова методов первой формы из второй добавьте во вторую форму свойство вроде 'oParentForm'.
В коде вызова второй формы из первой форму добавьте еще строку:
loForm2.oParentForm = THISFORM
Чем плох этот способ. Он предполагает жесткую связь,
Т.е. вызывающая форма, знает о вызываемой, больше чем ей требуется.
Не буду описывать порочность данного метода, легко нагуглить кучу рекомендация.
Ясно что иногда приходится поступаться "принципами"
Но в этом случае, у данного способа нет ни одного достоинства, по сравнению, с передачей параметра при вызове.


------------------
Ratings: 0 negative/0 positive
Re: Обратиться к кантролу вызывающей формы.
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
Аспид
lulgu
Для вызова методов первой формы из второй добавьте во вторую форму свойство вроде 'oParentForm'.
В коде вызова второй формы из первой форму добавьте еще строку:
loForm2.oParentForm = THISFORM
Чем плох этот способ. Он предполагает жесткую связь,
Т.е. вызывающая форма, знает о вызываемой, больше чем ей требуется.
Не буду описывать порочность данного метода, легко нагуглить кучу рекомендация.
Ясно что иногда приходится поступаться "принципами"
Но в этом случае, у данного способа нет ни одного достоинства, по сравнению, с передачей параметра при вызове.

Опять вы со своим бла-бла без конкретики.
Не нравится вам этот способ - так способов передавать параметры наберется десятка полтора, можете выбирать себе любой.
Ratings: 0 negative/0 positive
Re: Обратиться к кантролу вызывающей формы.
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
lulgu
Опять вы со своим бла-бла без конкретики.
Не нравится вам этот способ - так способов передавать параметры наберется десятка полтора, можете выбирать себе любой.
Посмотрите что я предложил. 4й пост.
Вы то же самое, но...
Я и написал свое отношение.
Впрочем, о чем я, и главное с кем.
Послание было адресовано не вам.


------------------
Ratings: 0 negative/0 positive
Re: Обратиться к кантролу вызывающей формы.
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
Аспид
lulgu
Опять вы со своим бла-бла без конкретики.
Не нравится вам этот способ - так способов передавать параметры наберется десятка полтора, можете выбирать себе любой.
Посмотрите что я предложил. 4й пост.
Вы то же самое, но...
Я и написал свое отношение.
Впрочем, о чем я, и главное с кем.
Послание было адресовано не вам.

Вот видите - оказывается, вы еще один способ в 4-м посту освоили, поэтому его и хвалите.
Ratings: 0 negative/0 positive
Re: Обратиться к кантролу вызывающей формы.
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
vodaic
На форме есть 2 Command, каждый из которых выполняет свои функции. Возникла надобность, чтобы оба Command выполнялись последовательно друг за другом без вмешательства пользователя. Но в Command1
строится своя экранная форма и там выполняются действия. По выполнению этих действий желательно запустить Command2 начальной формы. Но для активной формы Command2 уже не является Thisform.Command2. Вот и спрашиваю, как же мне запустить Command2?
Как уже писал Игорь, лучше вообще попробовать убрать всю логику с формы.
Но коли в лоб, решать эту задачу.
Делаешь Command2 невидимой. Еще лучше, вообще выкидываешь ее, и вместо нее, создаешь метод.
Например Method2
далее примерно как писал выше.
В Command1
do form2 with thisform
На форме 2 создаешь свойство
MyParent
Init
param toForm
this.MyParent=toForm
*Там где хочешь запустить Command2
ThisForm.MyParent.Method2()
*Если все же оставил кнопку
ThisForm.MyParent.Command2.Click()
Если все это выполнишь - задача решена.)


------------------




Исправлено 1 раз(а). Последнее : Аспид, 03.03.18 18:54
Ratings: 0 negative/0 positive
Re: Обратиться к кантролу вызывающей формы.
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
Вo вторую форму добавьте св-во ParentForm, и на Init-методе
lpara toForm
this.ParentForm = m.toForm
Зная 1-ю форму в любом месте (методе) 2-й формы можете обратится к любому объекту 1-й формы, например,
thisform.Text1.Value = Thisform.ParentForm.grid1.Column1.text1.Value
...
Thisform.ParentForm.grid1.Column1.text1.Value = thisform.Text1.Value
Ratings: 0 negative/0 positive
Re: Обратиться к кантролу вызывающей формы.
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
Igor Korolyov
а большая и волосатая Ж**А
Игорь, не пугай насмерть.
1. Не большая
2. Волосатая у животных (даже не у всех пород обезьян), но они не программисты.



Исправлено 2 раз(а). Последнее : Ydin, 05.03.18 03:07
Ratings: 0 negative/0 positive
Re: Обратиться к кантролу вызывающей формы.
vodaic
Автор

Сообщений: 188
Откуда: Киев, Украина
Дата регистрации: 24.02.2009
Уважаемые товарищи!
Большое спасибо всем отозвавшимся!
С вашей помощью получил то, чего хотел.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 23 (Гостей: 23)

© 2000-2024 Fox Club 
Яндекс.Метрика