powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / bindevent-получение результата
11 сообщений из 11, страница 1 из 1
bindevent-получение результата
    #34809547
AMorkovka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот bindevent(куда,куда_метод,откуда,откуда_метод)
В откуда_метод в коде RETURN может возвращать истину или ложь. Код куда_метод-пуст. И вот в приложении:
if куда.куда_метод(параметры) &&***
...
else
...
endif
куда.куда_метод(параметры) всегда дает истину, хотя пошагово проходит строчку RETURN .F.
Если в куда_метод внести какой-либо код, то код откуда_метод вообще не выполняется. Игрался с пятым параметром bindevent, но не прояснилось. Как же в описанной конструкции получать настоящее логическое значение?
...
Рейтинг: 0 / 0
bindevent-получение результата
    #34809623
при чем здесь рез-т и подписка на событие?

подписка на событие дает возмоность выполнить
какой-то метод в случае наступлении опред-го события

рез-т вып-я как Вы собрались считывать???

пятый параметр
влияет на очередность вып-я метода до или после наст-я события

если так хочется
извернуться, то у объекта заведите ассайн св-во-флаг,
а в ассайн методе этого св-ва уже разбирайте знач-е этого св-ва
если нужен пример, то покажу


еще вопрос
закралось сомнение
так уж Вам необходима подписка на соб-я???
объясните задачу
...
Рейтинг: 0 / 0
bindevent-получение результата
    #34809637
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не вижу описанной проблемы

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
public goForm
goForm = CreateObject("form1")
goForm.show()

DEFINE CLASS form1 AS form

	DoCreate = .T.
	Caption = "Form1"
	Name = "Form1"

	ADD OBJECT command1 AS commandbutton WITH ;
		Top =  48 , ;
		Left =  108 , ;
		Height =  27 , ;
		Width =  84 , ;
		Caption = "Bind", ;
		Name = "Command1"

	ADD OBJECT command2 AS commandbutton WITH ;
		Top =  144 , ;
		Left =  108 , ;
		Height =  27 , ;
		Width =  84 , ;
		Caption = "Click", ;
		Name = "Command2"

	PROCEDURE bindmethod
		wait window 'bindmethod' nowait
	ENDPROC

	PROCEDURE Init
		BindEvent(ThisForm.command1,"Click",ThisForm,"BindMethod")
	ENDPROC

	PROCEDURE command1.Click
		return .T.
	ENDPROC

	PROCEDURE command2.Click
		if ThisForm.command1.Click()
			?'YES'
		else
			?'NO'
		endif
	ENDPROC

ENDDEFINE

Меняя возвращаемое значение в Command1.Click() я получаю ожидаемое значение в Command2.Click() и при этом срабатывает связанный метод Form.BindMethod().

Возможно, у Вас проблема именно в связанных методах? О каких методах (событиях) идет речь?
...
Рейтинг: 0 / 0
bindevent-получение результата
    #34809649
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пришелмимо
пятый параметр
влияет на очередность вып-я метода до или после наст-я события

Уточню. А также на сам факт выполнения события при его программном вызове (как метода).

Если в приведенном примере в BindEvent() поставить флаг (5 параметр) в значении 2 или 3, то связанный метод не будет выполняться при нажатии на Command2, но выполнится при нажатии на Command1.
...
Рейтинг: 0 / 0
bindevent-получение результата
    #34821762
AMorkovka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извините великодушно. Времени на получение ответа на вопрос несколько дней назад оказалось слишком мало (уезжал из города). Теперь покажу подробней, что у меня не получалось. Нужно по форме кликнуть один раз и получится "ЕС", а нужно "НОУ". Почему так?

public goForm
goForm = CreateObject("form1")
goForm.show()

DEFINE CLASS cmdObrazec AS commandbutton
Caption = "Obrazec"
Name = "cmdObrazec"

PROCEDURE obrazec
RETURN .f.
ENDPROC
ENDDEFINE

DEFINE CLASS cmdRealy AS commandbutton
Caption = "Realy"
Name = "cmdRealy"

PROCEDURE kak_est
ENDPROC
ENDDEFINE

DEFINE CLASS form1 AS form

DoCreate = .T.
Caption = "Form1"
Name = "Form1"

ADD OBJECT cmdObrazec1 AS cmdObrazec WITH ;
Top = 48, ;
Left = 108, ;
Height = 27, ;
Width = 84

ADD OBJECT cmdRealy1 AS cmdRealy WITH ;
Top = 144, ;
Left = 108, ;
Height = 27, ;
Width = 84

PROCEDURE Init
BindEvent(ThisForm.cmdRealy1,"kak_est",ThisForm.cmdObrazec1,"obrazec")
ENDPROC

PROCEDURE Click
if ThisForm.cmdRealy1.kak_est()
?'YES'
else
?'NO'
endif
ENDPROC

ENDDEFINE

По ветке в дебаггере идет на RETURN .F., а результат .T., как исправить, чтоб было .f.?
...
Рейтинг: 0 / 0
bindevent-получение результата
    #34822047
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дурдом


kak_est()

из нее вернется рез-т
Вы же указываете
if ThisForm.cmdRealy1.kak_est()

почему Вы считаете,
что obrazec
должен что-то возвращать??
и возвращать именно в рез-т
вызова
if ThisForm.cmdRealy1.kak_est()


заведите св-во
и передергивайте ему значение

и вообще что-то странное на пустом месте

я не понимаю вообще к чему эти танцы
в чем состоит Ваша задача??
объясните суть задачи

в фокспро есть такое понятие - наследование ...
...
Рейтинг: 0 / 0
bindevent-получение результата
    #34822135
AMorkovka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Но в примере ВладимираМ похожее работает.
...
Рейтинг: 0 / 0
bindevent-получение результата
    #34822333
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AMorkovkaНо в примере ВладимираМ похожее работает.
События, связанные через BindEvents() вызываются не один-ВМЕСТО-другого (или один-ИЗ-другого), а один-ПОСЛЕ-другого.

Т.е. когда в Вашем примере Вы пишите вызов ThisForm.cmdRealy1.kak_est(), то этот метод успешно отрабатывает и возвращает некое значение. Именно это значение и обрабатывает IF. Поскольку в этом методе нет явной команды RETURN, то, по умолчанию, это означает RETURN .T.

ПОСЛЕ выполнения этого метода запускается связанный с ним метод ThisForm.cmdObrazec1.obrazec(). Но его возвращаемое значение принять уже некому. Оно уходит "в никуда".

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

Т.е. метод ThisForm.cmdObrazec1.obrazec не просто возвращает значение "в никуда", а присваивает возвращаемое значение некоему свойству формы. А в условии проверки делается запуск основного метода, после чего проверяется значение этого свойства формы. Не то, что вернул метод ThisForm.cmdRealy1.kak_est(), а значение свойства.
...
Рейтинг: 0 / 0
bindevent-получение результата
    #34822480
AMorkovka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А так работает вроде правильно:

public goForm
goForm = CreateObject("form1")
goForm.show()

DEFINE CLASS cmdObrazec AS commandbutton
Caption = "Obrazec"
Name = "cmdObrazec"

PROCEDURE obrazec(aa as Boolean)
aa=.f.
RETURN aa
ENDPROC
ENDDEFINE

DEFINE CLASS cmdRealy AS commandbutton
Caption = "Realy"
Name = "cmdRealy"

PROCEDURE kak_est(aa as Boolean)
RETURN aa
ENDPROC
ENDDEFINE

DEFINE CLASS form1 AS form

DoCreate = .T.
Caption = "Form1"
Name = "Form1"

ADD OBJECT cmdObrazec1 AS cmdObrazec WITH ;
Top = 48, ;
Left = 108, ;
Height = 27, ;
Width = 84

ADD OBJECT cmdRealy1 AS cmdRealy WITH ;
Top = 144, ;
Left = 108, ;
Height = 27, ;
Width = 84

PROCEDURE Init
aa=.t.
BindEvent(ThisForm.cmdRealy1,"kak_est",ThisForm.cmdObrazec1,"obrazec")
ENDPROC

PROCEDURE Click
if ThisForm.cmdRealy1.kak_est()
?'YES'
else
?'NO'
endif
ENDPROC

ENDDEFINE
...
Рейтинг: 0 / 0
bindevent-получение результата
    #34822573
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще раз вопрос

авторобъясните суть задачи

для чего Вы это делаете
и почему нужно именно подписаться на событие

решением для того, что Вы написали
явл-ся прямое написание кода в клике кнопки
с вызовом клика др.кнопки

во вторых
Вам подсказали, что завести нужно св-во
но никак не объявлять переменную


перед тем, чтобы пользоваться подпиской
нужно хотя-бы немного что-то в ООП понять
...
...
Рейтинг: 0 / 0
bindevent-получение результата
    #34822653
AMorkovka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я вижу теперь благодаря подсказкам, как решить задачу проще, но и рад, что нашел собственное решение. Тему от себя закрываю, но если остались комментарии у кого-то, обязательно прочитаю.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / bindevent-получение результата
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]