:: Visual Foxpro, Foxpro for DOS
Ячейка грида недовалидирована
Ydin
Автор

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
Ячейка в нижнем гриде, числовая, например.
Ввожу значение не до конца и не нажимаю Enter, и не перехожу в другую ячейку грида! И нажимаю кнопку - вставить строку в верхнем, например. Просто, уйти с грида.
Ну, не я, а Юзер! Я привык, что мне это не мешает.
Но тут 2 грида и много кнопок со своими кодами - методами.
В результате получаю не то, на что расчитывал.

Как мне заставить эту ячейку провалидировать?
Вряд ли мне тут помогут сейчас! А вдруг!

Свою проблему решил по-месту, частным образом. Не универсально, как тут в этом вопросе.



Исправлено 2 раз(а). Последнее : Ydin, 09.05.23 13:01
Ratings: 0 negative/0 positive
Re: Ячейка грида недовалидирована
PaulWist

Сообщений: 14618
Дата регистрации: 01.04.2004
Саша, не очень понятно про «провалидировать», … если это сделать проверку, то я обычно писал правило поля/записи.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Ячейка грида недовалидирована
Ydin
Автор

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
Пишем в ячейку (пусть в числовую) и нажимаем Энтер или переходим по гриду в др. ячейку.
И в ячейке валидированное значение после этого. А до этого невалидированное
Ratings: 0 negative/0 positive
Re: Ячейка грида недовалидирована
PaulWist

Сообщений: 14618
Дата регистрации: 01.04.2004
Ну, правило записи/ поля, причем независимо от того нажал Enter или нет, так же не зависит от поведения контролов, данные управляют данными.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Ячейка грида недовалидирована
Ydin
Автор

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
Да! Тут именно о контролах, у кот. есть метод VALID. Textbox такой!
Надо недоввести значение в ячейке Грида до конца и каким-то способом - вызовом прервать - Ячейка грида недовалидирована
Пива и еще из гвардии, может, проходили. Не та уже ярмарка
Не та уже сорочинская ярмарка - Гоголь



Исправлено 3 раз(а). Последнее : Ydin, 09.05.23 15:58
Ratings: 0 negative/0 positive
Re: Ячейка грида недовалидирована
Burn

Сообщений: 5643
Откуда: Днепр
Дата регистрации: 02.01.2002
LostFocus ведь отрабатывает. Вот в нем и попытаться явно заставить выполниться Valid
Ratings: 0 negative/0 positive
Re: Ячейка грида недовалидирована
akvvohinc

Сообщений: 4213
Откуда: Москва
Дата регистрации: 11.11.2008
Ydin
Надо недоввести значение в ячейке Грида до конца и каким-то способом - вызовом прервать - Ячейка грида недовалидирована
Доввели или недоввели значение в ячейку, значения не имеет - метод Valid ячейки выполняется в обоих случаях, если ячейка теряет фокус.
Так что проблема может быть в коде этого метода, который я не вижу, а поэтому и ответить на вопрос темы не могу.

Но что мешает пройти метод Valid в дебаггере для этого случая?

Ydin
каким-то способом - вызовом прервать
Тут важно, происходит ли при таком "прерывании" потеря ячейкой фокуса или нет.
Если юзер просто щелкнет мышкой на каком-то другом доступном объекте формы, то фокус ячейкой будет потерян, а Valid выполнится.



Исправлено 3 раз(а). Последнее : akvvohinc, 09.05.23 18:08
Ratings: 0 negative/0 positive
Re: Ячейка грида недовалидирована
akvvohinc

Сообщений: 4213
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
LostFocus ведь отрабатывает. Вот в нем и попытаться явно заставить выполниться Valid
И Valid выполняется при потере фокуса, причем, Valid раньше, чем LostFocus.
Но Саша и не писал, что Valid не выполняется (это легко проверить), он сообщил, что значение не валидируется, а это не одно и то же.
Ratings: 0 negative/0 positive
Re: Ячейка грида недовалидирована
Vedmak

Сообщений: 5966
Откуда: CiTY
Дата регистрации: 30.10.2003
Формально надо рассматривать не ячейку грида, а дочерний объект который указан в CurrentControl (их может быть несколько). Вот в его Valid и проводите все валидации и возвращайте 0 если не прошла и надо там остаться.

В приложении базовый класс который я использую для полей с датами. Если веденное значение не проходит проверку то текущий Control на форме не изменяется

И да, это работает для Control на форме вне зависимости от их привязки к "родителю".


------------------
Говорить стоит лишь для тех, кто слушает.




Исправлено 5 раз(а). Последнее : Vedmak, 10.05.23 00:21
Ratings: 0 negative/0 positive
Re: Ячейка грида недовалидирована
Ydin
Автор

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
Форма с 2 гридами стандартная для Фреймворка, на ней еще кнопки вставки новой записи.
В нижнем гриде меняется значение поля с 5-ю дес. знаками и по выходу из ячейки пересчет сумм для верхнего грида.
Юзер вводит пару десятичных знаков (ему больше не надо) и нажимает на кнопку вставки
И сумма попадает в новую строку, которая еще не имеет дочерних строк.
Те, кто до вставки нажимает Enter, получают нормальный результат.
Работая с Фреймворком мы ограничены по возможностям, многое за кадром.
Я провозился целый день, чтобы не меняя Фрейм, решить эту проблему.
У меня такое условие - не трогать Фрейм. Рассылка новой версии нежелательна.
Короче, пришлось его менять. В свойстве кнопки вставки добавил свойство OldRecno - номер строки, с кот. уходим в новую.
И тогда проблема решается.
Но ощущение того, что сделано не универсально. Кто-то из разработчиков тоже напорется.
Случай не такой уж редкий



Исправлено 1 раз(а). Последнее : Ydin, 10.05.23 09:25
Ratings: 0 negative/0 positive
Re: Ячейка грида недовалидирована
PaulWist

Сообщений: 14618
Дата регистрации: 01.04.2004
Значит при потери фокуса "ячейкой грида" её Control.Value не сбрасывается в ControlSource, что маловероятно, либо стоит 3,5 буфферизация на нижнем курсоре, а верхний вычисляется без with (buffering = .t.)


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Ячейка грида недовалидирована
Ydin
Автор

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
С самой ячейкой в нижнем гриде все нормально. Только ее валидация происходит, когда в верхнем гриде уже новая строка.
Фреймворку больше 20 лет. И вот первый раз эта проблема нарисовалась. Вот не хочет кто-то нажимать Enter...

В принципе, проблему наша программистка решила. Слегка по-другому написала код.
А я еще ищу универсальное решение для Фрейма.



Исправлено 1 раз(а). Последнее : Ydin, 10.05.23 09:44
Ratings: 0 negative/0 positive
Re: Ячейка грида недовалидирована
Владимир Максимов

Сообщений: 14097
Откуда: Москва
Дата регистрации: 02.09.2000
"Ты не мудри, ты пальцем покажи!" (с)

У тебя сейчас "чистый поток сознания". Совершенно непонятно в чем именно проблема. Мы же не видим, что у тебя на экране происходит и какие кнопки ты нажимаешь

Можно просто описание действий пользователя привести?

1. Вводим в ячейке Grid дробное значение 1,23
1.1. Если нажали Enter - все хорошо
1.2. Если (? что ?) - все плохо. "Плохо" означает (? что не было сделано ?)

Пожалуйста, не надо "слов-заклинаний". Просто напиши, что происходит. По пунктам. Нажимаем вот это, происходит вот это, а ожидали вот такое.

Не употребляй в своем ответе слово "валидация". Оно у тебя сейчас используется как некое "заклинание" в которое ты вкладываешь некий смысл, который понятен только тебе. Из описания, что именно ты в это слово вкладываешь лично я не понимаю. Поэтому и прошу пошаговую инструкцию для воспроизведения проблемы
Ratings: 0 negative/0 positive
Re: Ячейка грида недовалидирована
Равиль

Сообщений: 6549
Откуда: Уфа
Дата регистрации: 01.08.2003
Привет Александр !
Ydin
Ввожу значение не до конца и не нажимаю Enter, и не перехожу в другую ячейку грида! И нажимаю кнопку - вставить строку в верхнем, например ..
Такое может происходить, если эта Кнопка не стандартный баттон, а объект не принимающий фокуса, скажем картинка с рабочим методом Click()
При этом грид не теряет фокуса и не отрабатывают ни Valid ни LostFocus и метод видит старое необновленное значение.
И только потом когда у тебя фокус получает верхний грид и отрабатывает валид первого грида.
Если так, то я бы добавил в начало метода кнопки принудительную потерю фокуса первого грида.
Например сделать SetFocus на фантомный чекбокс на этой форме - тогда валид отработает.


------------------
Тяжело согнать курсором муху с монитора ...
Ratings: 0 negative/0 positive
Re: Ячейка грида недовалидирована
akvvohinc

Сообщений: 4213
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
Если так, то я бы добавил в начало метода кнопки принудительную потерю фокуса первого грида.
Например сделать SetFocus на фантомный чекбокс на этой форме - тогда валид отработает.
Как я понял, подобный явный костыль Саша уже реализовал.
Но тогда вместо создания "фантомного чекбокса" и перевода на него фокуса проще просто посылать тот ненажатый Enter.



Исправлено 2 раз(а). Последнее : akvvohinc, 10.05.23 16:54
Ratings: 0 negative/0 positive
Re: Ячейка грида недовалидирована
Равиль

Сообщений: 6549
Откуда: Уфа
Дата регистрации: 01.08.2003
Приветствую !

[quote akvvohinc][quote]... Но тогда вместо создания "фантомного чекбокса" и перевода на него фокуса проще просто посылать тот ненажатый Enter. [/quote]

Я бы не стал так делать, да и Вы наверное тоже )

Причин масса :
1) В общем случае текущее поле в гриде может быть и не то, где уместен этот Enter или он вообще не приведет к валиду, например в Editbox
2) Если объект тот и поле то, то придется выяснять был ли он "не нажатый" - чтобы лишний Enter не загнать
3) Посылать в буфер клавиатуры ? - я не уверен что Enter всегда отработает там где нужно в цепочке событий )

Временный перевод фокуса на другой объект снимает все вопросы )


------------------
Тяжело согнать курсором муху с монитора ...
Ratings: 0 negative/0 positive
Re: Ячейка грида недовалидирована
akvvohinc

Сообщений: 4213
Откуда: Москва
Дата регистрации: 11.11.2008
Равиль
Причин масса
Значит, я чего-то не понял.
Вы предложили создавать этот чекбокс всегда?

Я же полагал, что и создание чекбокса ради перевода фокуса, и эмуляция нажатия Enter ради того же будут выполняться только в тех случаях, когда это необходимо (я не задумывался, можно ли и если можно, то насколько легко определить эту необходимость).

Равиль
Причин масса:
Я мог бы разобрать и приведенные причины, если вы распишете более подробно, где и в какой момент предлагалось создавать чекбокс.
Можно даже работающий прототип.
А потом я попробую сделать на его основе вариант с Enter (или его аналог), но без создания фиктивного объекта.

Хотя про пункты 1) и 3) можно ответить уже сейчас:
1) Мы говорим про Enter потому, что Саша написал именно об Enter.
Но перевести фокус можно и другими способами, например, нажимая Tab.
Можно и просто там же, где вы собирались создавать чекбокс, перевести фокус на тот объект, на который он бы перешел после штатного нажатия Enter, и даже вернуть его потом обратно, если нужно или хочется.

3) я бы не дал голову на отсечение, что 2х2 в результате всегда даст 4.
А поэтому я приму во внимание любые сомнения лишь после того, как мне покажут вариант, в котором нечто не работает так, как предполагалось.

PS
Кстати, мы, возможно, обсуждаем то, чего нет - Саша пока не подтвердил, что валидация не происходит из-за того, что Valid не отрабатывает (фокус не переводится).
Я почему-то думаю, что проблема может быть в логике самого метода Valid.
Ratings: 0 negative/0 positive
Re: Ячейка грида недовалидирована
Равиль

Сообщений: 6549
Откуда: Уфа
Дата регистрации: 01.08.2003
Приветствую !

akvvohinc
Значит, я чего-то не понял.
Вы предложили создавать этот чекбокс всегда?

Я же полагал, что и создание чекбокса ради перевода фокуса, и эмуляция нажатия Enter ради того же будут выполняться только в тех случаях, когда это необходимо (я не задумывался, можно ли и если можно, то насколько легко определить эту необходимость) ...

Не буду лукавить - у меня на всех формах живет такой чекбокс )
вне видимости окна и с Enabled=.f. чтобы случайно фокус не перешел.

Пришлось так сделать когда пришло поколение юзеров,
которые не покидая поле ввода сразу жмут горячую клавишу или нестандартную кнопку (вангую) как у Александра.

Да можно создать прототип, затем Вы покажете вариант с Keyboard Enter или Tab,
затем я постараюсь и покажу как буфер клавиатуры может опорожниться совсем не там где надо )
а Вы покажете как этого избежать )
а на другой чаще весов наше с Вами драгоценное время и похоже потеря интереса у Александра )
и одну и ту же проблему можно решить N способами ... )

Если принципиально, мы можем продолжить


------------------
Тяжело согнать курсором муху с монитора ...
Ratings: 0 negative/0 positive
Re: Ячейка грида недовалидирована
akvvohinc

Сообщений: 4213
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
Если принципиально, мы можем продолжить
Спасибо, Равиль!
Конечно, ничего принципиального для меня здесь нет.
(тем более, что сегодня начинается ЧМ по хоккею, и мне будет, на что потратить часть свободного времени. )
Ratings: 0 negative/0 positive
Re: Ячейка грида недовалидирована
Равиль

Сообщений: 6549
Откуда: Уфа
Дата регистрации: 01.08.2003
akvvohinc
Цитата:
Если принципиально, мы можем продолжить
Спасибо, Равиль!
Конечно, ничего принципиального для меня здесь нет.
(тем более, что сегодня начинается ЧМ по хоккею, и мне будет, на что потратить часть свободного времени. )

Пожалуйста ) аналогично - только не хоккей, а садово-огородный сезон !


------------------
Тяжело согнать курсором муху с монитора ...
Ratings: 0 negative/0 positive


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

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

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