|
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
|
|||
---|---|---|---|
#18+
Привет! Такая проблема - есть FormSet, 2 формы, обе открыты/активны/видимы, одна поверх другой. Есть на форме текстбоксы в которых в методе Valid проверяется правильность некоего введенного кода. !!!Внимание: в любом случае Valid возвращает .Т.!!! Просто если код неверен выводится сообщение-предупреждение об этом и все - это единственное что мне необходимо. И раз из метода не возвращается .F. - ситуация когда пока не сотрешь/исправишь неправильный код даже выйти нельзя - исключена. Так оно и было пока были только отдельные формы, а вот формы в FormSet-е видимо ведут себя несколько по-другому. Дело в том, что выводом предупреждения занимается отдельный класс, т.е. это отдельная форма. Если пользоваться мышкой , в случае когда выводится окно-сообщение, то по его закрытию и возврату к текстбоксу, фокус остается в нем! Получается вечный цикл... Что интересно - если дебажить - цикла нет, если нажимать для перехода к следующему полю Tab, Enter или стрелку курсора вниз - все нормально: сообщение, "переход хода". Мышкой же - никак, ни в следующее поле, ни в любые контролы формы вообще - во что ни тыкай - получаю мессагу, а фокус из текстбокса не уходит и всё тут! Что делать и кто виноват?(с) Пока идея только одна (так и сделал) - ввести в текстбокс поле LastValidatedValue и если оно=текущему Value не выполнять метод Valid. Но это, как говорится, лечение последствий/симптомов болезни, но не самой болезни. Важно понимать почему сие происходит, т.е. в чем, собственно, проблема? спасибо! вфп9 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2009, 19:30 |
|
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
|
|||
---|---|---|---|
#18+
В 1С 8.2 это назвается что-то вроде "ПроверкаЗаполнения" и на фоксе перед записью объекта - проверял все ли поля заполнены - а форме только предупреждал, что что-то введено некорректно. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2009, 20:39 |
|
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
|
|||
---|---|---|---|
#18+
CTAC-KO, Кто виноват - не знаю. Можно попробовать перенести вызов формы для выдачи сообщений из Valid в LostFocus - если я правильно помню, он выполняется после Valid. Либо выдавать сообщение об ошибке с помощью WAIT .... NOWAIT - он не возвращает управление в тот объект, откуда был вызван. Сам я не не использовал FORMSET-ы и с такой ситуацией не сталкивался ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2009, 09:46 |
|
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
|
|||
---|---|---|---|
#18+
CTAC-KO, Не надо код проверки помещать непосредственно в Valid - это нехороший тон в программировании и источник проблем. Сделайте отдельный метод в контролах, ответственный за проверку данных (его можно (и нужно) завести в базовом классе этого контрола). Из Valid вызывайте этот метод с нестрогой проверкой, т.е. сообщение выдавать, но фокус отпускать, чтоб пользователей не насиловать. А уже перед сохранением можно вызывать все методы проверки данные в контролах со строгой проверкой, т.е. сообщение выдавать и фокус возвращать на контрол с ошибочными данными. Тогда хоть клавиатурой, хоть мышой будет орудовать пользователь, но все предусмотренные вами проверки обязательно отработают, и во время ввода пользователю мешать не будут. (А спустя какое-то время придёте к выводу, что весь код по вызову методов проверки данных можно вообще вынести в родительские классы контролов и форм, не насилуя конечный прикладной класс) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2009, 10:23 |
|
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
|
|||
---|---|---|---|
#18+
Сам код проверки ставить в Valid - это как раз очень даже правильно на мой взгляд. Другое дело возврат .F. в результате такой проверки - вот это уже реально "нехороший тон в программировании и источник проблем". Вынос проверки из Valid-а в свой метод и вызов этого метода из Valid-а в данной ситуации - колхоз "Напрасный труд" (проверено). И потом - у меня только окно с сообщением-предупреждением, я фокус никоим образом не удерживаю, тем более с целью "насилования юзеров". А вот окончательная проверка данных во всех контролах перед "записью" у меня тоже сделана давно, только вот с установкой фокуса куда надо у меня проблемы - там по PageFrame-ам ходить надо, а особенно радует матрёшка из PageFrame-ом, там нада заходить фокусом по всей иерархии до контрола, короче сделать можно, но влом. Пока обошелся подсветкой всех контролов, непрошедших валидацию. Потом юзер ищет че где не так. А вот чтобы этого избежать (поиска), сразу же и выдаю предупреждение. Разве что действительно вешаться со своей валидацией на LostFocus... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2009, 13:18 |
|
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
|
|||
---|---|---|---|
#18+
немного подумав, чисто теоретически... В LostFocus-е если сделать, то в принципе это решит б0льшую часть проблем кроме одной - если ткнуть мышой в форму или что куда хуже мимо неё - получаю мессагу (а в случае с мимотыком - так и вовсе неожиданно), потом ткнуть таки в поле или куда там еще положено тыкать :) - опять получаю мессагу, т.к. реально фокус сначала уйдет, но сразу же вернеццо или если в масштабах формы (мимотык) - то и вообще из контрола не выйдет... Тут все равно надо вводить LastValidatedValue... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2009, 13:27 |
|
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
|
|||
---|---|---|---|
#18+
Ничего не понял из описания проблемы. Вы хотите сказать, что при определенных условиях из TextBox.Valid() дается команда вроде Код: plaintext
Т.е. идет вызов модальной формы. И если из объекты пытаются выйти при помощи клавиатуры, то после закрытия этой модальной формы выход проходит без проблем, а если пытаются выйти при помощи мышки, то после закрытия модальной формы фокус возвращается в тот же объект. Т.е. выхода не происходит. Сдалал FormSet. Сделал модальную форму. Сделал ее вызов в методе TextBox.Valid() одной из форм FormSet. Никаких проблем. Что мышкой, что клавишами. VFP9SP1. Сделайте тестовый пример, заархивируйте и положите во вложение. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2009, 16:01 |
|
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
|
|||
---|---|---|---|
#18+
да, именно это я и хочу сказать. вырезать будет трудновато... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2009, 07:51 |
|
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
|
|||
---|---|---|---|
#18+
CTAC-KOда, именно это я и хочу сказать. вырезать будет трудновато... Не надо вырезать. Создайте ЗАНОВО. На базовых классах FoxPro. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2009, 12:08 |
|
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
|
|||
---|---|---|---|
#18+
Привет! Вот, нашел время, собрал - эффект на месте. Только вот заковыка в том, что форма вызвается на DO FORM (но если вызывать так, то все ок), а создаеццо из класа через NEWOBJECT. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2009, 12:23 |
|
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
|
|||
---|---|---|---|
#18+
блин,ё, если предварительный простмотр делаешь, то файл отваливается... как этот движек уже достал... ёмаё... редактирования нет, смайлов нет, еще и глюки... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2009, 12:25 |
|
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
|
|||
---|---|---|---|
#18+
2 Владимир Максимов Привет! С прошедшими праздниками! Так как, подтвердите "странное" поведение? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2010, 12:23 |
|
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
|
|||
---|---|---|---|
#18+
(test.zip - 12Kb) cкачать ну и? в нем нет половины нужных файлов. TestFocus? сделай нормальный пример и напиши как постучать, чтобы смоделировать ситуацию и куда смотреть, догадываться и разгадывать ребусы нет желания ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2010, 12:33 |
|
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
|
|||
---|---|---|---|
#18+
Извините, профтыкал добавить Код: plaintext
ну а описать проблему я уже описал, но, конечно, чтобы быстрее было: Запускаем через прогу formsetfocus, появляется FormSet на две формы, но видно только первую, с двумя полями. В первом поле в методе Valid любом случае выводится сообщение. Попробуйте перейти фокусом на любой другой объект формы с помощью мышки. А потом попробуйте клавой, ТАБ-ом, к примеру. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2010, 14:57 |
|
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
|
|||
---|---|---|---|
#18+
выхожу на асфальт в лыжи обутая, толи лыжи не едут, толи я .... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2010, 15:10 |
|
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
|
|||
---|---|---|---|
#18+
Да, йолки-моталки! :) Я создал этот проект среди своего и запуталсо малёхо... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2010, 17:03 |
|
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
|
|||
---|---|---|---|
#18+
CTAC-KOДа, йолки-моталки! :) Я создал этот проект среди своего и запуталсо малёхо... Скачайте сами приложенный файл и посмотрите его содержимое. Если найдете в нем форму testFocus, то сообщите обязательно ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2010, 17:07 |
|
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
|
|||
---|---|---|---|
#18+
вот, еще раз, уже окончательно - сам проверил в отдельной директории ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2010, 17:10 |
|
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
|
|||
---|---|---|---|
#18+
ВладимирМСкачайте сами приложенный файл и посмотрите его содержимое. Если найдете в нем форму testFocus, то сообщите обязательно есть, только называется FormtestFocus ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2010, 17:12 |
|
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
|
|||
---|---|---|---|
#18+
CTAC-KOВладимирМСкачайте сами приложенный файл и посмотрите его содержимое. Если найдете в нем форму testFocus, то сообщите обязательно есть, только называется FormtestFocus скачали, посмотрели. CTAC-KO, отнеси на другой компутер распакуй свой проект и попробуй запустить. когда поймешь в чем твоя ошибка - милости просим. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2010, 17:36 |
|
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
|
|||
---|---|---|---|
#18+
Еще раз. СКАЧАЙТЕ тот файл, который Вы залили. Посмотрите ЧТО Вы залили. Вто то, что есть в последнем test.zip formsetfocus.bak formsetfocus.fxp formsetfocus.pjt formsetfocus.pjx formsetfocus.prg msger.vct msger.vcx Какой из этих файлов является формой? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2010, 17:37 |
|
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
|
|||
---|---|---|---|
#18+
авторвот, еще раз, уже окончательно - сам проверил в отдельной директории 2 CTAC-KO, у тябя картинки и формы по путям ищет, у нас этих путей и каталогов нет. ты нам дал какой-то субдовыдер, который невоможно запустить на машине отличной от твоей будь добр, сделай такой пример, который можно будет запустить и посмотреть у нас, не имеющих какого-то набора уникальных файлов, которыми располагаешь ты сам, т.е. пример должен быть таким, чтобы он у нас запустился, мы увидели, смоделировали проблему, а не разгадывали ребусы, которые нам сто лет не хочется разгадывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2010, 17:43 |
|
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
|
|||
---|---|---|---|
#18+
Еще раз выкладываю! Извините - все время выкладывал 1 и тот же архив, а обновлял другой. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2010, 18:59 |
|
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
|
|||
---|---|---|---|
#18+
в валид текстбокса напишите Код: plaintext 1. 2. 3. 4. 5. 6.
так устроит? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2010, 09:16 |
|
Объект.Valid() формы FormSet-а + форма-мессага = вечный Valid()
|
|||
---|---|---|---|
#18+
ни в коем случае не устроит, т.к. есть возврат .F.! А допустим мне не на пусто проверять, а на что-то другое, соотв. юзер даже закрыть форму не сможет пока не выполнит условие, даже если ему это все нах не нада, ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2010, 13:31 |
|
|
start [/forum/topic.php?fid=41&msg=36378877&tid=1585687]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
51ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 333ms |
total: | 489ms |
0 / 0 |