powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
25 сообщений из 33, страница 1 из 2
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36372484
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет!
Такая проблема - есть FormSet, 2 формы, обе открыты/активны/видимы, одна поверх другой. Есть на форме текстбоксы в которых в методе Valid проверяется правильность некоего введенного кода.
!!!Внимание: в любом случае Valid возвращает .Т.!!!
Просто если код неверен выводится сообщение-предупреждение об этом и все - это единственное что мне необходимо. И раз из метода не возвращается .F. - ситуация когда пока не сотрешь/исправишь неправильный код даже выйти нельзя - исключена. Так оно и было пока были только отдельные формы, а вот формы в FormSet-е видимо ведут себя несколько по-другому.
Дело в том, что выводом предупреждения занимается отдельный класс, т.е. это отдельная форма. Если пользоваться мышкой , в случае когда выводится окно-сообщение, то по его закрытию и возврату к текстбоксу, фокус остается в нем! Получается вечный цикл... Что интересно - если дебажить - цикла нет, если нажимать для перехода к следующему полю Tab, Enter или стрелку курсора вниз - все нормально: сообщение, "переход хода". Мышкой же - никак, ни в следующее поле, ни в любые контролы формы вообще - во что ни тыкай - получаю мессагу, а фокус из текстбокса не уходит и всё тут!

Что делать и кто виноват?(с)

Пока идея только одна (так и сделал) - ввести в текстбокс поле LastValidatedValue и если оно=текущему Value не выполнять метод Valid. Но это, как говорится, лечение последствий/симптомов болезни, но не самой болезни. Важно понимать почему сие происходит, т.е. в чем, собственно, проблема?

спасибо!

вфп9
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36372565
piva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В 1С 8.2 это назвается что-то вроде "ПроверкаЗаполнения" и на фоксе перед записью объекта - проверял все ли поля заполнены - а форме только предупреждал, что что-то введено некорректно.
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36372996
Sea_Cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CTAC-KO,

Кто виноват - не знаю. Можно попробовать перенести вызов формы для выдачи сообщений из Valid в LostFocus - если я правильно помню, он выполняется после Valid. Либо выдавать сообщение об ошибке с помощью WAIT .... NOWAIT - он не возвращает управление в тот объект, откуда был вызван.
Сам я не не использовал FORMSET-ы и с такой ситуацией не сталкивался
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36373073
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CTAC-KO,

Не надо код проверки помещать непосредственно в Valid - это нехороший тон в программировании и источник проблем. Сделайте отдельный метод в контролах, ответственный за проверку данных (его можно (и нужно) завести в базовом классе этого контрола). Из Valid вызывайте этот метод с нестрогой проверкой, т.е. сообщение выдавать, но фокус отпускать, чтоб пользователей не насиловать. А уже перед сохранением можно вызывать все методы проверки данные в контролах со строгой проверкой, т.е. сообщение выдавать и фокус возвращать на контрол с ошибочными данными. Тогда хоть клавиатурой, хоть мышой будет орудовать пользователь, но все предусмотренные вами проверки обязательно отработают, и во время ввода пользователю мешать не будут. (А спустя какое-то время придёте к выводу, что весь код по вызову методов проверки данных можно вообще вынести в родительские классы контролов и форм, не насилуя конечный прикладной класс)
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36373664
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сам код проверки ставить в Valid - это как раз очень даже правильно на мой взгляд. Другое дело возврат .F. в результате такой проверки - вот это уже реально "нехороший тон в программировании и источник проблем".
Вынос проверки из Valid-а в свой метод и вызов этого метода из Valid-а в данной ситуации - колхоз "Напрасный труд" (проверено). И потом - у меня только окно с сообщением-предупреждением, я фокус никоим образом не удерживаю, тем более с целью "насилования юзеров".
А вот окончательная проверка данных во всех контролах перед "записью" у меня тоже сделана давно, только вот с установкой фокуса куда надо у меня проблемы - там по PageFrame-ам ходить надо, а особенно радует матрёшка из PageFrame-ом, там нада заходить фокусом по всей иерархии до контрола, короче сделать можно, но влом. Пока обошелся подсветкой всех контролов, непрошедших валидацию. Потом юзер ищет че где не так. А вот чтобы этого избежать (поиска), сразу же и выдаю предупреждение.

Разве что действительно вешаться со своей валидацией на LostFocus...
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36373698
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
немного подумав, чисто теоретически...
В LostFocus-е если сделать, то в принципе это решит б0льшую часть проблем кроме одной - если ткнуть мышой в форму или что куда хуже мимо неё - получаю мессагу (а в случае с мимотыком - так и вовсе неожиданно), потом ткнуть таки в поле или куда там еще положено тыкать :) - опять получаю мессагу, т.к. реально фокус сначала уйдет, но сразу же вернеццо или если в масштабах формы (мимотык) - то и вообще из контрола не выйдет... Тут все равно надо вводить LastValidatedValue...
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36374207
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничего не понял из описания проблемы.

Вы хотите сказать, что при определенных условиях из TextBox.Valid() дается команда вроде

Код: plaintext
DO FORM MyModalForm.scx

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

Сдалал FormSet. Сделал модальную форму. Сделал ее вызов в методе TextBox.Valid() одной из форм FormSet. Никаких проблем. Что мышкой, что клавишами. VFP9SP1.

Сделайте тестовый пример, заархивируйте и положите во вложение.
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36378877
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, именно это я и хочу сказать. вырезать будет трудновато...
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36379441
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CTAC-KOда, именно это я и хочу сказать. вырезать будет трудновато...
Не надо вырезать. Создайте ЗАНОВО. На базовых классах FoxPro.
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36393561
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет!
Вот, нашел время, собрал - эффект на месте. Только вот заковыка в том, что форма вызвается на DO FORM (но если вызывать так, то все ок), а создаеццо из класа через NEWOBJECT.
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36393565
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин,ё, если предварительный простмотр делаешь, то файл отваливается... как этот движек уже достал... ёмаё... редактирования нет, смайлов нет, еще и глюки...
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36409441
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Владимир Максимов
Привет! С прошедшими праздниками!

Так как, подтвердите "странное" поведение?
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36409474
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(test.zip - 12Kb) cкачать

ну и? в нем нет половины нужных файлов.
TestFocus?

сделай нормальный пример
и напиши как постучать, чтобы смоделировать ситуацию
и куда смотреть,
догадываться и разгадывать ребусы нет желания
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36409997
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извините, профтыкал добавить
Код: plaintext
SET CLASSLIB TO msger.vcx
и закаментить работу с чекбоксом одним (надо было его не убирать из окна...)
ну а описать проблему я уже описал, но, конечно, чтобы быстрее было:
Запускаем через прогу formsetfocus, появляется FormSet на две формы, но видно только первую, с двумя полями. В первом поле в методе Valid любом случае выводится сообщение. Попробуйте перейти фокусом на любой другой объект формы с помощью мышки. А потом попробуйте клавой, ТАБ-ом, к примеру.
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36410041
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выхожу на асфальт в лыжи обутая,
толи лыжи не едут,
толи я ....
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36410411
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, йолки-моталки! :) Я создал этот проект среди своего и запуталсо малёхо...
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36410420
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CTAC-KOДа, йолки-моталки! :) Я создал этот проект среди своего и запуталсо малёхо...
Скачайте сами приложенный файл и посмотрите его содержимое. Если найдете в нем форму testFocus, то сообщите обязательно
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36410432
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот, еще раз, уже окончательно - сам проверил в отдельной директории
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36410437
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМСкачайте сами приложенный файл и посмотрите его содержимое. Если найдете в нем форму testFocus, то сообщите обязательно есть, только называется FormtestFocus
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36410536
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CTAC-KOВладимирМСкачайте сами приложенный файл и посмотрите его содержимое. Если найдете в нем форму testFocus, то сообщите обязательно есть, только называется FormtestFocus

скачали, посмотрели.
CTAC-KO, отнеси на другой компутер распакуй свой проект и попробуй запустить.
когда поймешь в чем твоя ошибка - милости просим.
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36410540
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз. СКАЧАЙТЕ тот файл, который Вы залили. Посмотрите ЧТО Вы залили. Вто то, что есть в последнем test.zip

formsetfocus.bak
formsetfocus.fxp
formsetfocus.pjt
formsetfocus.pjx
formsetfocus.prg
msger.vct
msger.vcx

Какой из этих файлов является формой?
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36410579
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторвот, еще раз, уже окончательно - сам проверил в отдельной директории

2 CTAC-KO,

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

ты нам дал какой-то субдовыдер, который
невоможно запустить на машине отличной от твоей

будь добр,
сделай такой пример, который
можно будет запустить и посмотреть у нас,
не имеющих какого-то набора уникальных
файлов, которыми располагаешь ты сам,
т.е. пример должен быть таким,
чтобы он у нас запустился,
мы увидели, смоделировали проблему,
а не разгадывали ребусы,
которые нам сто лет не хочется разгадывать.
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36410802
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз выкладываю! Извините - все время выкладывал 1 и тот же архив, а обновлял другой.
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36411411
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в валид текстбокса напишите
Код: plaintext
1.
2.
3.
4.
5.
6.
If Empty(this.Value)
	m.goMessager.Msg('Пусто. Укажите что-то')
	Return .f.
Else
	Return .t.
EndIf 

так устроит?
...
Рейтинг: 0 / 0
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
    #36412146
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ни в коем случае не устроит, т.к. есть возврат .F.! А допустим мне не на пусто проверять, а на что-то другое, соотв. юзер даже закрыть форму не сможет пока не выполнит условие, даже если ему это все нах не нада,
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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