Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Можно ли в событии Valid узнать контрол для которого потом виполнится When? / 15 сообщений из 15, страница 1 из 1
30.08.2004, 11:55
    #32670835
lnu
lnu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в событии Valid узнать контрол для которого потом виполнится When?
Можно ли в событии Valid узнать контрол для которого потом виполнится When(GotFocus)?
...
Рейтинг: 0 / 0
30.08.2004, 12:36
    #32670955
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в событии Valid узнать контрол для которого потом виполнится When?
Нет. Это противоречит самой идеологии события Valid() - проверка перед выходом из объекта.

Правда, если переход между объектами осуществляется мышкой, то порядок следования событий примерно такой:

Text1.Valid()
Text2.When()
Text1.LostFocus()
Text2.GotFocus()

Т.е. в принципе, можно запомнить ссылку на объект в When и обработыть ее в LostFocus. Проблема только в том, что если переключение между объектами осуществляется через клавишу Tab (или вообще при помощи клавишь), то порядок срабатывания событий будет другой:

Text1.Valid()
Text1.LostFocus()
Text2.When()
Text2.GotFocus()

Так что, логичнее определять не куда перейдет указатель, а откуда пришел, и если надо, возвращать фокус на место.
...
Рейтинг: 0 / 0
30.08.2004, 12:43
    #32670978
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в событии Valid узнать контрол для которого потом виполнится When?
Немного добавлю к предыдущему ответу.

Если Valid возвратит число больше 0 - то оно будет означать - "на сколько контолов фокус прыгнет ваперед..." брр... Вот лучше английский вараинт этой фразы: "If a positive value is returned, the value specifies the number of controls the focus advances."

Далее - дело техники и зависит от того, что Вам надо...
...
Рейтинг: 0 / 0
30.08.2004, 13:04
    #32671033
lnu
lnu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в событии Valid узнать контрол для которого потом виполнится When?
Дело в том, что мне надо узнать, на какой перевели фокус, поскольку в LostFocus должен быть примерно такой код:
Код: plaintext
1.
2.
3.
4.
If NewControl.Parent.Class="....."
     && Делаем одно
else 
    && Делаем что-то другое
endif
ВладимирМ Т.е. в принципе, можно запомнить ссылку на объект в When и обработыть ее в LostFocus
Для каждого обьекта на форме?.. :(
...
Рейтинг: 0 / 0
30.08.2004, 13:24
    #32671101
lnu
lnu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в событии Valid узнать контрол для которого потом виполнится When?
If a positive value is returned, the value specifies the number of controls the focus advances
А откуда мне знать, какое value is returned?
...
Рейтинг: 0 / 0
30.08.2004, 13:32
    #32671124
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в событии Valid узнать контрол для которого потом виполнится When?
lnuА откуда мне знать, какое value is returned?
А кто тут прораммист?

Так вот эти Ваши условия и надо вводить в valid - там уже и задавать, что произойдет - если одно, то перевод на один объект и т.д....

А возвращаемое число - это всего лишь вспомогательный передаточный механизм, который должна рожать ваша бизнес - логика... Ибо в valid нельзя просто так писать многие вещи...
...
Рейтинг: 0 / 0
30.08.2004, 13:42
    #32671172
lnu
lnu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в событии Valid узнать контрол для которого потом виполнится When?
Вообще-то я думал так:
в методе Valid
this.TabIndex+dodefault() и у меня есть номер следующего контрола...
Но dodefault()=.T., а не positive or negative value :(
Ну ладно...

Спасибо.
...
Рейтинг: 0 / 0
30.08.2004, 13:52
    #32671192
lnu
lnu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в событии Valid узнать контрол для которого потом виполнится When?
А возможно ли такое: ActiveControl_assign?
...
Рейтинг: 0 / 0
30.08.2004, 14:04
    #32671228
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в событии Valid узнать контрол для которого потом виполнится When?
Может мы не поняли друг - друга

Пксть есть задача, например TEXT1 поле - в котором надо проанализировать значение введенного числа. В событие VALID пишем:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Do case
 case this.value =  0 
   return  0  && заставим пользователя ввести хоть что-то
case this.value =  1 
   return - 2  && переместим фокус на два контрола перед TEXT1
case this.value =  2 
   return  2  && переместим фокус на два контрола вперед TEXT1
 ...
endcase

Или что-то в таком виде...
Ну а перемещение по contrals будет идти в зависисмости от TabIndex
...
Рейтинг: 0 / 0
30.08.2004, 14:17
    #32671271
lnu
lnu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в событии Valid узнать контрол для которого потом виполнится When?
Мне надо знать куда перейдет фокус. Если мы на Text1, на чем будет фокус: на Text2 или на Text3. Т.е. новое значение Thisform.ActiveControl.
...
Рейтинг: 0 / 0
30.08.2004, 14:57
    #32671414
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в событии Valid узнать контрол для которого потом виполнится When?
В принципе, решения есть, но все они "кривоватые".

Предлагаю использовать "одноразовый" таймер.

1) Кладешь на форму таймер у которого делаешь настройки
ThisForm.Timer1.enabled=.F.
ThisForm.Timer1.interval=10

2) В методе LostFocus для TextBox в котором нужен анализ включаешь этот таймер

ThisForm.Timer1.enabled=.T.

3) А в собственно таймере пишешь примерно такую обработку

Код: plaintext
1.
2.
3.
IF This.Enabled AND TYPE("ThisForm.ActiveControl.Name")="C"
	MessageBox(ThisForm.ActiveControl.Name)
	This.Enabled=.F.
ENDIF

Здесь я просто делаю вывод имени активного контрола, а тебе нужно будет написать твою обработку.

Как видишь, таймер сам себя выключает, потому и "одноразовый", а проверку на enabled внутри таймера нужна чтобы не было повторных срабатываний.
...
Рейтинг: 0 / 0
30.08.2004, 15:22
    #32671500
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в событии Valid узнать контрол для которого потом виполнится When?
lnuМне надо знать куда перейдет фокус. Если мы на Text1, на чем будет фокус: на Text2 или на Text3. Т.е. новое значение Thisform.ActiveControl.
Так Вы же можете это указать - куда переводить фокус...
Что-то я Вас не понимаю - ведь программист задает имя следующего объекта а не пользователь...
...
Рейтинг: 0 / 0
30.08.2004, 16:03
    #32671607
lnu
lnu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в событии Valid узнать контрол для которого потом виполнится When?
Так Вы же можете это указать - куда переводить фокус...
Что-то я Вас не понимаю - ведь программист задает имя следующего объекта а не пользователь...
Именно пользователь нажимає кнопку TAB или щелкает мышкой на другом контроле...

Я делаю что-то вроде дизайнера справочников. Для поля єтого справочника я назначаю контрол (BaseClass="Container"),в котором, например, Label и Edit. Его можна перетаскивать, менять размеры как в дизайнере форм Фокса. На DBLClick я открываю контрол на редактирование (перемещение, изменение размеров) уже Label и Edit, что-то вроде как в Container в Дизайн-тайме (рисую вокруг контрола рамочку потолще...и т.д. и ставлю значение своего свойства editmode=.T.). Но если кликнуть в FormDesigner'e за приделами Container'a, то рамочка изчезает, єтого я и добиваюсь в своем контроле. Если фокус переходит на обьект за приделами моего контрола, то надо спрятать рамочку (editmode=.F), если нет, то рамочка остается... Вот єти условия мне и надо проверить...
...
Рейтинг: 0 / 0
30.08.2004, 16:21
    #32671672
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в событии Valid узнать контрол для которого потом виполнится When?
Я не понял, почему ты не можешь спрятать рамочку при потере фокуса самим контейнером? Ведь перемещение по объектам внутри контейнера не вызовет потери фокуса контейнером!

Т.е. в твоем случае достаточно просто в Container.LostFocus спрятать рамочку, а в Container.GotFocus снова ее отобразить
...
Рейтинг: 0 / 0
30.08.2004, 16:53
    #32671784
lnu
lnu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли в событии Valid узнать контрол для которого потом виполнится When?
Торможу... уже цєлый день...

Работает. Спасибо...
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Можно ли в событии Valid узнать контрол для которого потом виполнится When? / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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