:: Visual Foxpro, Foxpro for DOS
И вновь этот злополучный KeyPress
ZenTigra
Автор

Сообщений: 514
Дата регистрации: 03.12.2004
Никак не разберусь с событием KeyPress, хочу уйти от ON KEY LABEL.

Есть форма Form1 на ней есть Grid1 и кнопка Command1, нажатие на которую запускает форма Form2 (форма модальная, в ней редактируются данные из Grid1)
В форме Form1 свойство KeyPreview=.T., а в KeyPress прописан такой код

DO CASE
CASE nKeyCode=-2.AND.nShiftAltCtrl=0 &&F3
THISFORM.Command1.Click
ENDCASE

Так вот, когда нажатые кнопки происходит через клавишу "F3", после закрытия формы Form2, на первой форме Forma1 происходит неприятная прорисовка Grid1 (мерцание), но когда на кнопку Command1 нажать мышкой, такого эффекта нет.

Когда для обработки нажатия клавиши написать вот такой код
ON KEY LABEL F3 _screen.ActiveForm.Command1.Click
такого эффекта тоже нет.
PS.Windows 7 (с установленной темой Windows XP), VFP9
Ratings: 0 negative/0 positive
Re: И вновь этот злополучный KeyPress
pasha_usue

Сообщений: 3650
Откуда: Е-бург
Дата регистрации: 06.10.2006
Фокус с грида снимите. ThisForm.Command1.SetFocus()
Ratings: 0 negative/0 positive
Re: И вновь этот злополучный KeyPress
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
Совершенно не в тему.
На мой взгляд, то бишь ИМХО)))
Не стоит записывать какой то код в
THISFORM.Command1.Click
Ну просто это событие.
Там должен быть вызов метода.
Я понимаю, лишние телодвижения.
Но почему то так правильно)
И из других мест, вы не дергаете это событие, а вызываете нужный метод.

Наверное в фоксе это не так важно?
Не помню уже. Но сам стиль...


------------------
Ratings: 0 negative/0 positive
Re: И вновь этот злополучный KeyPress
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
NODEFAULT - чтобы не происходило "штатной реакции на нажатие F3".
И сделай как Владимир советует. Заведи метод "вызывающий форму2", и его вызывай и из KeyPress, и из Click кнопки.
Вызов THISFORM.Command1.Click это буэ.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: И вновь этот злополучный KeyPress
ZenTigra
Автор

Сообщений: 514
Дата регистрации: 03.12.2004
pasha_usue
Фокус с грида снимите. ThisForm.Command1.SetFocus()

Спасибо, помогло
Ratings: 0 negative/0 positive
Re: И вновь этот злополучный KeyPress
ZenTigra
Автор

Сообщений: 514
Дата регистрации: 03.12.2004
Igor Korolyov
NODEFAULT - чтобы не происходило "штатной реакции на нажатие F3".
И сделай как Владимир советует. Заведи метод "вызывающий форму2", и его вызывай и из KeyPress, и из Click кнопки.
Вызов THISFORM.Command1.Click это буэ.

Хорошо, так и сделаю, а то не слушался раньше, а оказывается Вы правы были...

Вот только б понять, зачем так делать?



Исправлено 1 раз(а). Последнее : ZenTigra, 11.07.17 13:13
Ratings: 0 negative/0 positive
Re: И вновь этот злополучный KeyPress
ZenTigra
Автор

Сообщений: 514
Дата регистрации: 03.12.2004
Не очень в тему, но ....
А если очень хочется использовать Alt+F2...F10, или Alt+X (У меня это было - закрыть окно)
Уже привык к ним, а KeyPress их отловить не может, как быть?

PS.Alt+F2... можно перевести на Ctrl+F2... (можно переучиться), но вот с другими....
Ratings: 0 negative/0 positive
Re: И вновь этот злополучный KeyPress
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
ZenTigra
Вот только б понять, зачем так делать?
А ты просто поверь))))
Клик - это событие. Событие вызывает метод. Ну и т.д.
Думаю на эту тему можно что то нагуглить.

ZenTigra
А если очень хочется использовать Alt+F2...F10, или Alt+X (У меня это было - закрыть окно)
Уже привык к ним, а KeyPress их отловить не может, как быть?
Это действует во всем ПО?
Вот не уверен, но попробуй повесить эти клавиши в меню.


------------------
Ratings: 0 negative/0 positive
Re: И вновь этот злополучный KeyPress
pasha_usue

Сообщений: 3650
Откуда: Е-бург
Дата регистрации: 06.10.2006
Аспид
ZenTigra
Вот только б понять, зачем так делать?
А ты просто поверь))))
В смысле поверь? Где логика, когда ты нажимаешь F3, а при этом срабатывает событие Click? Какой Click, не было никакого клика, а был самый что ни на есть KeyPress.

А вот когда на событии KeyPress висит вызов метода OpenEditForm(), и на событии Click висит вызов этого же метода, логика есть.

Опять же, если не знать, что где-то в KeyPress стоит вызов Command1.Click, то можно вообще об этом никогда не догадаться, что такой вызов есть. И сидишь ты, дописываешь права доступа к этой форме. Сделал кнопку Enabled=.F., а по F3 форма всё-равно у пользователя открывается.
Ratings: 0 negative/0 positive
Re: И вновь этот злополучный KeyPress
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
На самом деле при вызове Command1.Click никакого "события Click" не "срабатывает" - банально вызывается метод-обработчик с названием Command1.Click. Но т.к. в фоксе обработчик события совершенно жёстко связан с собственно событием (по сути событие не существует само по себе, без одноименного метода-обработчика), то лучше разделять логику.

Вот в каком другом языке, или в фоксе при использовании позднего связывания через BINDEVENT - там вполне может быть так, что код обработчика события собственно некоторую "логику" и реализует, и один и тот же метод-обработчик привязан к разным событиям разных элементов управления - правда он, скорее всего, не будет назван Click в этом случае

Ну и да, всё же обработка нажатий клавиш и нажатий экранных кнопок слегка различны - там разные "параметры срабатывания" передаются, потому такие "обработчики событий" не сводят в один - т.е. тоже останется простой код обработчика события, и более сложный код "реализации логики" вызываемый из разных обработчиков


------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 26 (Гостей: 26)

© 2000-2024 Fox Club 
Яндекс.Метрика