powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SetFocus() на немодальную форму
4 сообщений из 4, страница 1 из 1
SetFocus() на немодальную форму
    #34976161
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем!

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

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

Самплес в архиве (запустить Form2 и нажать Enter). У кого-нибудь мысли есть как обойти?
Вторую форму модальную не хочу.
...
Рейтинг: 0 / 0
SetFocus() на немодальную форму
    #34976214
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
123
...
Рейтинг: 0 / 0
SetFocus() на немодальную форму
    #34976279
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По нажатию 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
SetFocus() на немодальную форму
    #34976855
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем. С утра надо такими головоломками заниматься :) на свежую голову.

Решение такое получилось:
Добавил свойство 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
4 сообщений из 4, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SetFocus() на немодальную форму
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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