Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как правильно управлять фокусом / 5 сообщений из 5, страница 1 из 1
25.11.2012, 12:55
    #38052106
Jonny540
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно управлять фокусом
Здравствуйте все! Что-то я давно вопросов не задавал
Вот смотрите, такая штука:
Мне надо, чтобы в случае неудачного поиска фокус был на тексбоксе.
Если я щелкаю мышом по кнопке "Поиск" (потом на Messagebox), то все нормально, но
если жму "Enter" (потом на Messagebox), то фокус уходит на следующий объект (по TabOrder).
Пришлось достать бубен (строки "танца" я закомментил). А как это все сделать без бубна?
Форма As Top Level, код кнопки прилагаю.
Cilck() кнопки "Поиск"
Код: plsql
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.
IF This.Caption="Поиск"
	SELECT Telefon
	lnRec=RECNO()
	lcText=UPPER(Thisform.txtFind.Value)
	IF !ISBLANK(lcText)
		COUNT FOR lcText $ UPPER(Telefon.company) OR lcText $ UPPER(Telefon.fio) OR ;
				lcText $ UPPER(Telefon.tlf) OR lcText $ UPPER(Telefon.primech) TO lnQz
		IF lnQz>0
			......
		ELSE
*			lnKey=LASTKEY()
			MESSAGEBOX("Нет записей, удовлетворяющих условию.",64,"Результат поиска")
			GO lnRec
			Thisform.txtFind.Setfocus()
*			IF lnKey=13
*				KEYBOARD '{BACKTAB}' PLAIN CLEAR
*			ENDIF
		ENDIF
	ELSE
		MESSAGEBOX("Задайте подстроку для поиска.",64,"Ошибка")
		Thisform.txtFind.Setfocus()
	ENDIF
ELSE
	This.Caption="Поиск"
	SET FILTER TO
	SET ORDER TO
	GO TOP
	Thisform.Grid1.Refresh
	Thisform.txtFind.Value=""
	Thisform.txtFind.Setfocus()
ENDIF

KeyPress() textbox
Код: plsql
1.
2.
3.
4.
LPARAMETERS nKeyCode, nShiftAltCtrl
IF nKeyCode=13
	Thisform.cmdFind.Click()
ENDIF



Может, кто сталкивался?

P.S. В Init() все путем, никаких перескоков нет.
...
Рейтинг: 0 / 0
25.11.2012, 13:27
    #38052119
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно управлять фокусом
Используй nodefault в KeyPress() чтобы не отрабатывало штатное перемещение фокуса. А дальше сам двигай фокус как тебе надо.
Код: sql
1.
2.
3.
4.
5.
LPARAMETERS nKeyCode, nShiftAltCtrl
IF nKeyCode=13
	Thisform.cmdFind.Click()
	nodefault
ENDIF
...
Рейтинг: 0 / 0
25.11.2012, 13:43
    #38052129
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно управлять фокусом
Jonny540
Код: sql
1.
2.
3.
*			IF lnKey=13
*				KEYBOARD '{BACKTAB}' PLAIN CLEAR
*			ENDIF



И это не стоит делать. Откуда такая уверенность что пользователь ошибся именно в последнем символе?
Не надо помогать исправить введенную инфу, указал на ошибку и достаточно. Непонятные самостоятельные действия проги только запутают пользователя.
...
Рейтинг: 0 / 0
25.11.2012, 17:47
    #38052263
Jonny540
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно управлять фокусом
Dima TJonny540
Код: sql
1.
2.
3.
*			IF lnKey=13
*				KEYBOARD '{BACKTAB}' PLAIN CLEAR
*			ENDIF



И это не стоит делать. Откуда такая уверенность что пользователь ошибся именно в последнем символе?
Не надо помогать исправить введенную инфу, указал на ошибку и достаточно. Непонятные самостоятельные действия проги только запутают пользователя.Это не исправления - это и есть "танцы", чтобы вернуть фокус на текстбокс
...
Рейтинг: 0 / 0
25.11.2012, 17:50
    #38052265
Jonny540
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно управлять фокусом
Dima TИспользуй nodefault в KeyPress() чтобы не отрабатывало штатное перемещение фокуса. А дальше сам двигай фокус как тебе надо.
Код: sql
1.
2.
3.
4.
5.
LPARAMETERS nKeyCode, nShiftAltCtrl
IF nKeyCode=13
	Thisform.cmdFind.Click()
	nodefault
ENDIF

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


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