Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SetFocus() на немодальную форму / 4 сообщений из 4, страница 1 из 1
29.11.2007, 18:21
    #34976161
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SetFocus() на немодальную форму
Привет всем!

Голову сломал, решил сюда отписаться.
Хочу сделать следующее: поле ввода, если введено значение не из справочника, то по LostFocus() вызывается справочник. Обе формы немодальные.

Что происходит - по LostFocus() (Enter нажали) вызывается вторая форма, затем фокс передает фокус на следующий элемент первой формы и ставит ее поверх второй.
Насильная передача фокуса на контрол второй формы тоже не помогает.

Самплес в архиве (запустить Form2 и нажать Enter). У кого-нибудь мысли есть как обойти?
Вторую форму модальную не хочу.
...
Рейтинг: 0 / 0
29.11.2007, 18:34
    #34976214
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SetFocus() на немодальную форму
123
...
Рейтинг: 0 / 0
29.11.2007, 19:00
    #34976279
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SetFocus() на немодальную форму
По нажатию Enter происходит установка в очередь 2 событий:

-) Выход из текущего объекта
-) Вход в очередной объект, указанный по TabIndex

Точнее, каждое из этих событий разбивается на несколько этапов (несколько событий), но для понимания это не важно.

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

Значит, чтобы решить поставленную задачу надо предотвратить автоматический переход из данного объекта в другой объект. Простейший вариант - это просто запретить выход из текущего объекта при выполнении некоторого условия. Запрет выхода может быть реализован только в событии Text.Valid() вот туда и переносим код с некоторыми дополнениями

Код: plaintext
1.
2.
3.
4.
5.
If Empty(this.Tag)
	do form form3 
	this.Tag="yes"
	Return  0 
endif

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

Более сложный вариант (а может, наборот, более простой) - это кроме основного кода создать еще одноразовый таймер, который после перевода фокуса в очередной объект сделает принудительный перевод фокуса на нужную форму.
...
Рейтинг: 0 / 0
30.11.2007, 07:36
    #34976855
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SetFocus() на немодальную форму
Спасибо всем. С утра надо такими головоломками заниматься :) на свежую голову.

Решение такое получилось:
Добавил свойство oActivate на форму
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
proc Form1.Text1.LostFocus()
do form form2
thisform.oActivate = form2


proc Form1.Activate()
if vartype(this.oActivate) = 'O'
	this.oActivate.Show()
	this.oActivate = .F.
endif
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SetFocus() на немодальную форму / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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