powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / (TextBox) метод SetFocus
23 сообщений из 23, страница 1 из 1
(TextBox) метод SetFocus
    #33093864
Фотография Grumax_user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ситуция проста как овсянка...есть TextBox, в него вводится число, я проверяю по LostFocus'у правильность ввода(на предмет двойников), если есть такой номер, то курсор по идее должен вернуться на этот TextBox...но у мя что-то не пашет(голова)
В событии LostFocus:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
LOCAL lcKmat
lcKmat=This.Value 
SELECT Nsm
LOCATE FOR ALLTRIM(Nsm.Kmat)==lcKmat
IF FOUND()
	MESSAGEBOX("Материал с данным номером № "+lcKmat+" уже существует", 0 + 64 ,dfCaption)
*	This.SetFocus 
	ThisForm.text1.SetFocus 
ENDIF 

------------------------------------------------------------------------------------
Код: plaintext
Я во все дела суюсь -> всесторонне разовьюсь                                                         Visual FoxPro 8.0
...
Рейтинг: 0 / 0
(TextBox) метод SetFocus
    #33093894
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Убери все в Valid:

LOCAL lcKmat
lcKmat=This.Value
SELECT Nsm
LOCATE FOR ALLTRIM(Nsm.Kmat)==lcKmat
IF FOUND()
MESSAGEBOX("Материал с данным номером № "+lcKmat+" уже существует",0+64,dfCaption)
* This.SetFocus
* ThisForm.text1.SetFocus
return 0
ENDIF
...
Рейтинг: 0 / 0
(TextBox) метод SetFocus
    #33093913
Фотография Grumax_user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To: AleksMed
Прописал "Return 0", все равно выдается Мессага и курсор уходит на следующий TextBox 8-(

------------------------------------------------------------------------------------
Код: plaintext
Я во все дела суюсь -> всесторонне разовьюсь                                                         Visual FoxPro 8.0
...
Рейтинг: 0 / 0
(TextBox) метод SetFocus
    #33093968
Andrey Ts
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VFP Help:
Код: plaintext
If the Valid event returns true (.T.), the control loses focus. If the Valid event returns false (.F.), the control does not lose focus.
...
Рейтинг: 0 / 0
(TextBox) метод SetFocus
    #33094020
Фотография Grumax_user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То: Andrey Ts
Ж)) я канечна туплю, но не до такой же степени...
Код: plaintext
1.
2.
3.
4.
IF FOUND()
	MESSAGEBOX("Материал с данным номером № "+lcKmat+" уже существует", 0 + 64 ,dfCaption)
*!*			This.SetFocus 
	RETURN .F.
ENDIF 
Еще раз повторюсь...при нажатии на TAB, выдает мессагу и переходит, что мне вроде бы не надо....хелп плиззз

------------------------------------------------------------------------------------
Код: plaintext
Я во все дела суюсь -> всесторонне разовьюсь                                                         Visual FoxPro 8.0
...
Рейтинг: 0 / 0
(TextBox) метод SetFocus
    #33094048
Фотография Grumax_user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соррии AleksMed и Andrey Ts...засунул все в Valid Event все заработало, но теперь наступил на другие грабли. Если пользователь нажал добавить и стал вводить дублёра, ему выдал Мессагу, он понял что есть такой материал и хочет нажать на Command типа "Отмена", а ему не дают, приходится вводить не имеющийся код и нажимать "Отмена"...как разрулить этот конфликт? Спасибо.

------------------------------------------------------------------------------------
Код: plaintext
Я во все дела суюсь -> всесторонне разовьюсь                                                         Visual FoxPro 8.0
...
Рейтинг: 0 / 0
(TextBox) метод SetFocus
    #33094248
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем понял, что требуется, но возможно так:
MESSAGEBOX("Материал с данным номером № "+lcKmat+" уже существует. Ввод будет отменен",64,dfCaption)
ThisForm.cmdCancel.Click
...
Рейтинг: 0 / 0
(TextBox) метод SetFocus
    #33094302
Фотография Grumax_user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос скорее по организации...выдавать сообщение о неправильном вводе, когда пользователь уходит с TextBox'а или когда нажимает на кнопку в Click'е которой Insert? Спасибо.

------------------------------------------------------------------------------------
Код: plaintext
Я во все дела суюсь -> всесторонне разовьюсь                                                         Visual FoxPro 8.0
...
Рейтинг: 0 / 0
(TextBox) метод SetFocus
    #33094303
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Grumax_user
Это вопрос организации я так не делаю
У меня для редактирования одельная форма диалога и все проверки происходят разом в момент попытки внесения записи в базу целиком (нажатие на кнопку)
И это для меня удобнее потому что иногда кое-что и заблокировать надо, но блокировочку долго-то держать низя и т.д. и т.п. В общем мне так удобнее
Короче оставьте в покое валид... просто совет и ничего более
Хотя конечно есть искусство, а есть монотонная работа, и если вы романтик или художник в душе, то почему бы и нет ?
...
Рейтинг: 0 / 0
(TextBox) метод SetFocus
    #33094589
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Grumax_user :

Лучше - бить по рукам, пока он еще ничего не сделал (как в анекдоте про первого космотуриста: - Полет прошел хорошо? - Хорошо, только руки опухли. - Почему?? - А только протянешь куда-нибудь руку, командир корабля - дынц по ней...)
Идеально - ставить проверку во время ввода. На первом же "ненужном" символе - сигнал, можно какое-нибудь предупреждение, и тут же, пока пользователь не пришел в себя - последний символ "съедается" и - курсор снова моргает в ожидании правильного символа :)
Такая система при построении требует чуть больше заморочек - зато потом самому же легче - не надо отлавливать все ситуации. чего там сумеют понавводить.
...
Рейтинг: 0 / 0
(TextBox) метод SetFocus
    #33096013
Burn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Grumax_userему выдал Мессагу, он понял что есть такой материал и хочет нажать на Command типа "Отмена", а ему не дают, приходится вводить не имеющийся код и нажимать "Отмена"...как разрулить этот конфликт?

Я поступаю просто - у кнопочки "Отмена" выставлено свойство ThisForm.MyCommand.Cancel=.t. Тогда в Valid-е TextBox-а достаточно написать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
IF LastKey() <>  27 
   lcKmat=This.Value 
   SELECT Nsm
   LOCATE FOR ALLTRIM(Nsm.Kmat)==lcKmat
   IF FOUND()
       MESSAGEBOX("Материал с данным номером № "+lcKmat+" уже существует", 0 + 64 ,dfCaption)
        RETURN  0 
   ENDIF
ENDIF
...
Рейтинг: 0 / 0
(TextBox) метод SetFocus
    #33096116
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Crispy!

1) ВСЁ не проверишь. Тем более дубли в многопользовательской среде. Эта проверка вообще реально может быть выполнена только в момент записи данных в таблицу - не раньше. Или ты сторонник FLOCK() и "Пускай весь мир подождёт"(c)
2) Когда юзера постоянно шпуняют - он звереет - найдёт дырку в твоей защите и напихает тебе в таблицу всякой дряни - добрее надо быть к нему, мягче :)

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
(TextBox) метод SetFocus
    #33096436
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hi, Igor Korolyov !

>ВСЁ не проверишь

Это и козе понятно (хотя ежу - не всегда :). Но - мне кажется - чем больше проверяешь ввод, тем меньше потом проблем на выводе :).

>проверка вообще реально может быть выполнена только в момент записи данных в таблицу - не раньше

Отчего же. Проверка КОРРЕКТНОСТИ данных в МОМЕНТ занесения данных - что мешает создать свои правила для нее, не давая занести неверные данные ЕЩЕ в память, ДО записи в таблицу, несмотря даже на многопользовательскую среду?

>Когда юзера постоянно шпуняют...

Да нет же! То, о чем я хотел сказать - это наоборот - проявление самой доброты :) и предупредительной вежливости по отношению к нему :)). Действительно - за ним даже убирают неправильно введенный символ! (ну а за лишний "пик-пик" перед этим и сообщение типа: "Вы видимо нечаянно описались!" ( ) он, скорее всего будет винить лишь свои ручки, хотя уж себя-то тут же простит - ну с кем не бывает - так что обид, а тем более злобы это не вызовет - разве что в клинических случаях... :)
...
Рейтинг: 0 / 0
(TextBox) метод SetFocus
    #33096455
Andrey Ts
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Grumax_userВопрос скорее по организации...выдавать сообщение о неправильном вводе, когда пользователь уходит с TextBox'а или когда нажимает на кнопку в Click'е которой Insert? Спасибо.

Я в Valid пишу пимерно так:
Код: plaintext
1.
2.
3.
4.
IF Text1.Value=bad_value AND !EMPTY(Text1.Value) 
  MESSAGEBOX(...)
  RETURN .F.
ENDIF
важно AND !EMPTY(Text1.Value)
...
Рейтинг: 0 / 0
(TextBox) метод SetFocus
    #33096561
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Andrey Ts Я в Valid пишу пимерно так:

IF Text1.Value=bad_value AND !EMPTY(Text1.Value)
MESSAGEBOX(...)
RETURN .F.
ENDIF

важно AND !EMPTY(Text1.Value)
Это - да. Можно еще "обнулять" (="") Text1.Value после MESSAGEBOX-а, для простоты выхода, если в этот момент захочется выйти, а если - нет, тогда для пользователя обнуление будет неудобно, особенно, если ввод длинный - заново набирать. Поэтому, по-моему, и лучше - стирать последний неверно введенный символ, предоставляя ввести другой, верный.
...
Рейтинг: 0 / 0
(TextBox) метод SetFocus
    #33096710
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CrispyДа нет же! То, о чем я хотел сказать - это наоборот - проявление самой доброты :) и предупредительной вежливости по отношению к нему :)). Действительно - за ним даже убирают неправильно введенный символ! (ну а за лишний "пик-пик" перед этим и сообщение типа: "Вы видимо нечаянно описались!" ( ) он, скорее всего будет винить лишь свои ручки, хотя уж себя-то тут же простит - ну с кем не бывает - так что обид, а тем более злобы это не вызовет - разве что в клинических случаях... :)

Какая там вежливость! Я прямо это так и вижу: ввожу, я, значит, текст в Word и почти на каждой букве мне "пик-пик": Вы, видимо, нечаяно описались! Честное слово, я сразу перейду на Notepud.

Ведь практически каждое слово можно рассматривать как ошибочное написание другого слова: "Аптека" - это ошибка в написании слова "Оптика". Т.е. пока не введешь все слово целиком невозможно сказать есть ошибка или нет.

Я даже не могу сказать, что для программиста это проще. Ведь надо в каждом конкретном случае писать собственный алгоритм разбора какая буква правильная, а какая - нет.

Вы, почему-то, исходите из предположения, что, в основном, пользователи набирают текст правильно, а ошибка в наборе текста - это исключительно редкая операция. Лично у меня, все с точностью наоборот. Правильный набор с первого раза - это исключительно редкая ситуация. Обычно есть куча опечаток. Я их потом исправляю, после набора. Так что, лично у меня такая "забота" ничего кроме раздражения не вызовет.

Вобщем, боюсь, пользователи побьют за такую "заботу".
...
Рейтинг: 0 / 0
(TextBox) метод SetFocus
    #33096978
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hi, 2ВладимирМ !

Word - не есть продукт фокс-программиста :). (хотя можно теоретически - попытаться написать Word-Notepad и на фоксе, вот только зачем?)
Речь в этом топике - если только я правильно все понял - не о глобальных проблемах текстового редактора, а всего лишь - о ВВОДЕ каких-то коротких слов (фамилий, названий организаций - обычно в пределах 25-40 символов) в текстовое поле, т.е. явно - не о занесении туда сочинения на тему "Как я провел выходные..." :)
Тем более, если еще раз ПРОЧИТАТЬ автора: проблема - в действиях в связи с ОБНАРУЖЕНИЕМ ДВОЙНИКОВ , т.е. образец "правильного написания" - в наличии!!!
Именно об этом шла речь в моих предложениях.

А если бы я вдруг написал Word на фоксе - я бы сделал точно так же, как и его создатели (разве плохо?) - неправильные слова просто подчеркиваются, с возможностью при желании это отключать.
...
Рейтинг: 0 / 0
(TextBox) метод SetFocus
    #33097116
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так мы говорим об обнаружении двойников? Что ж Вы сразу-то не сказали

Каким боком анализ ввода каждого символа может предотвратить ввод двойников? (Ваше сообщение (не автора топика) я поняли именно так - контроль ввода каждого символа)

При всем желании невозможно сказать введен двойник или нет до тех пор пока не будут введены ВСЕ символы.

Это значит, что делать анализ при вводе каждого символа - просто бессмысленное занятие.

Хорошо, делаем анализ при выходе из TextBox (при попытке выхода).

-) Проверяем факт наличия двойника в исходной таблице
-) Если двойника нет редактируем остальные поля ввода
-) По окночании ввода всех полей пытаемся записать данные

И вот тут облом. Пока один пользователь редактировал другие поля воода другой пользователь создал новую запись с тем же значением.

Следовательно, делать проверку в момент выхода из TextBox просто не имеет смысла. Она не гарантирует того, что дубль не будет сделан другим пользователем. Т.е. проверять на факт возможного дубля надо именно в процессе сохранения, а не в процессе ввода.

С другой стороны. Если делается проверка на этапе ввода и факт дубля обнаружен, то какие дальнейшие действия?

-) Запретить выход из поля? Ну, так Вы никогда форму не сможете закрыть, если передумали делать ввод. Т.е. даже для того, чтобы отказаться от модификации надо ввести уникальное значение?

-) Автоматически заменить некорректное значение корректным? А какое значение будет корректным? Может пользователь в одной букве ошибся, а Вы его заставляете целиком заново вводить все значение.

-) Дать уведомительное сообщение об ошибке не запрещая выход из поля? Думаете он вспомнит, что где-то там ему что-то сообщили, когда надо вводить еще кучу всяких значений в разных других TextBox-ах на той же форме? Еще недоволен будет, что его какими-то сообщениями отрывают от ввода данных.
...
Рейтинг: 0 / 0
(TextBox) метод SetFocus
    #33097366
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ВладимирМ
Какая там вежливость! Я прямо это так и вижу: ввожу, я, значит, текст в Word и почти на каждой букве мне "пик-пик":
согласен навсе сто
Просто был у меня такой случай с контролем вводимого в текстбокс ну типа если буква английская я юзеру мессягу смените мол раскладку и подтераю ввод
хорошо было пока сам на попробывал
короче теперь в подобных полях что-бы юзер не бил всё одно по-русски будет ну или ничего совсем не будет без всяких там сообщений
Я всё это к чему ? К тому что лень она есть побудитель
...
Рейтинг: 0 / 0
(TextBox) метод SetFocus
    #33097369
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Никто и не спорит по поводу ЗАНЕСЕНИЯ отредактироавнной записи - просто это уже другие проблемы.
И потом, вот же оно(!): Может пользователь в одной букве ошибся, а Вы его заставляете целиком заново вводить все значение. Так ведь как раз - и не заставляем(!), а предлагаем вписать верную букву, а неверную убираем, чтобы ускорить ему ввод А если таких "близких" двойников нет - ничего "пикать" и выскакивать и не будет - такой "локальный" контроль без проблем будет пройден - он вовсе не заменяет собой глобального контроля на этапе занесения записи в БД (но это уже выходит за пределы данного топика??)

Есть такая неприятная вещь - когда тебя не понимают... Хотя, еще хуже, когда тебя и вовсе никто не слышит...
...
Рейтинг: 0 / 0
(TextBox) метод SetFocus
    #33097420
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
leafкороче теперь в подобных полях что-бы юзер не бил всё одно по-русски будет ну или ничего совсем не будет без всяких там сообщений
Абсолютно согласен! - Ну зачем трамваю руль? - вместо поля ввода всегда предпочитаю список выбора, если это возможно. А если нет - лучше уж десятикратный контроль еще на этапе ввода...
А вообще, пользователь на удивление ко всему привыкает - иной раз видишь - в такую программу часами вводит данные, что у тебя, кажется, и терпения на такое не хватило бы, а он (обычно она) вводит - и хоть бы что. Еще и разговор с кам-нибудь ведет в это время...
...
Рейтинг: 0 / 0
(TextBox) метод SetFocus
    #33097539
Фотография Grumax_user
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем...
Messagebox'ы юзвери не читают, обычно идет такая реакция: "Ой у нас тут какая-то какашка вылезла!"
Приходишь к ним...чего случилось, показывают -> на экране Мессага с сообщением типа "запись занята другим пользователем", спрашиваешь: "Читали?"
"Нет.." - отвечают.... *мат*
Вобщем, я их решил задолбать Мессагами :-)). А решение вижу в проверке правильности введенного значения при выходе с TextBox'а, путем выдачи "Какашки" и по Click'у кнопки ввода, а если опять не правильно то делать Focus на неправильный TextBox.

------------------------------------------------------------------------------------
Код: plaintext
Я во все дела суюсь -> всесторонне разовьюсь                                                         Visual FoxPro 8.0
...
Рейтинг: 0 / 0
(TextBox) метод SetFocus
    #33097762
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CrispyЕсть такая неприятная вещь - когда тебя не понимают... Хотя, еще хуже, когда тебя и вовсе никто не слышит...
"Слышу, сынку, слышу"

Просто Вы непоследовательны в своих возражениях. Когда я сравнил такой ввод с вводом в Word Вы почему-то возмутились, что речь идет о дублях. Когда я возразил, что и для дублей это не метод, Вы обиделись, что Вас никто не слышит.

Значит, цель контроля ввода каждой буквы - это исключение дублей? Ну, это Вы круто загнули. Как по фрагменту слова можно однозначно сказать, что это уже было или не было? Вы представляете что будет, если поле символов в 30 и отличия только в последних 5...10 символах? Да у Вас не программа будет а музыкальный центр!

Кроме того, не знаю, как именно Вы вводите текст, но когда я ввожу данные, то обычно смотрю не на экран, а на клавиатуру (или в бумажку, с которой набиваю данные). Не учили меня "слепой" печати. Т.е. постепенно, конечно, перехожу к этому методу, но постепенно...

Представляете ЧТО будет введено в Вашей программе при таком контроле? Правильно, скорее всего вообще ничего! Или полный "мусор" с пропущенными буквами.

Т.е. пользователь колотил-колотил по клаве, а программа ничего не ввела?! Почему собственно? Правильно, программа плохая!

С точки зрения конечной цели - контроль дублирующих значений анализ каждого вводимого символа в общем случае никуда не годиться!

Это еще имело бы смысл, если бы среди всего множества значений не могло бы быть значений с одинаковыми начальными символами (т.е. если ввели "Иванов", то никаких "Иванова" быть не может!), да и то, сильно сомнительно.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / (TextBox) метод SetFocus
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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