![]() |
ещё delphi
Как проверить, является ли текст в Edit1 - integer? Делаю фильтрацию по разным критериям, один из них - как раз integer. Если в Edit1 текст не будет числовым, программа накрывается. А охота бы сделать мессагу, мол "Чё ты в самом-то деле, поле в базе числовое, а ты, ***** чё пишешь?!"
Кста, пробовал сделать try... except, но вот чё писать в этом except? "Поможите, люди добрые, чем сумеете..." Добавлено: чтоб было понятнее - try begin Table1.Filtered := False; Table1.Filter := 'Id = ' + QuotedStr(Edit1.Text); --> На этой строке останавливается и рапортует об ошибке.... Table1.Filtered := True; end; except begin MessageDlg('Error', mtError, [mbOK], 0); exit; end; end; |
Открываешь вкладку Additional палитры компонентов и находишь там TMaskEdit и... наслаждаешься жизнью!!!
|
Дело в том, что мне нужно вводить не только числа. Стоят radiobutton-ы, один из которых и даёт произвести фильтрацию по 'id'.
Но нечаянно окрыв вместо dpr файла exe, обнаружил, что уже скомпилленный файл рапортует как и надо, а в дельфи - выкидывает из программы :) Это только у меня так, или так и должно быть? |
о-па-на... приплыли казАки...
вопрос нескромный можно: А кто ж фильтрует (даёт возможность юзеру) знать ИД какой-либо записи ? РадоБаттон, говоришь, дык и сделай так, чтобы когда стоит режим активности фильтра, то проверялось бы наличие (и содержимое, ессно) поля фильтра, если нет - дейтсвовали бы СКЛ строки по-умолчанию. Ведь они есть ? |
Цитата:
|
Тип TStrings компонента TQuery свойсвто SQL
|
Если в Delphi в Tools->Environment options->Break on Exception
стоит крестик, то под отладчиком тебя будет выбрасывать в программу даже если это exception в дальнейшем нормально обрабатывается. При этом можно нажать F9 и программа пойдет дальше. |
someone312002
ааааа, вот ты о чём... так эта... у меня без sql и tquery... aleks_k2 Я так и думал, тока удостовериться хотел :) |
Если тебе нужно проверить Edit1.Text, не изменяя исходный пример, то можно так:
try begin Table1.Filtered := False; Table1.Filter := 'Id = ' + QuotedStr(IntToStr(StrToInt(Edit1.Text))); --> На этой строке останавливается и рапортует об ошибке.... Table1.Filtered := True; end; except begin MessageDlg('Error', mtError, [mbOK], 0); exit; end; end; StrToInt сгенерирует исключение, если не сможет перевести строку в число. Хотя смотрится все это не очень-то красиво. Добавлено через 16 минут: Вот чего получилось: Код:
try |
наибанальное...
Код:
function TForm1.CheckStr(sstr: string): boolean; |
Можно эту же проверку делать в обработчике onChange и не давать юзеру вводить не нужные значения, выводить сообщение об ошибке и возвращать фокус на ввод.
Я только не совсем понял, а чем TMaskEdit не устроил? |
Гм может в лужу сяду,но в билдере есть такая функция как StrToInt , Создать обработчик ее ошибок и все.(Не знаю есть ли подобная функция в дельфях).
|
Ставишь TMaskEdit, а в зависимости от выбранного RadioButton назначаешь для TMaskEdit.EditMask строку маски и все, сможешь как текст вводить так и число!
А можно как Izzyy сказал, проверку делать в обработчике onChange и не давать юзеру вводить не нужные значения, я так тоже иногда пользую TEdit, причем один обработчик можно использовать сразу для нескольких полей ввода! |
Код:
Function ValidInt (AText:String) : Integer; |
На основе вышесказанного напрашивается простая проверка:
procedure TForm1.Edit1Change(Sender: TObject); var i:integer; Str:string; begin for i:=1 to Edit1.GetTextLen do begin if (not (copy(Edit1.Text, i, 1)[1] in ['0'..'9'])) then begin Str:=Edit1.Text; SetLength(Str,Edit1.GetTextLen-1); Edit1.Text:=Str; MessageDlg('Очепятка',mtError,[mbOk],0) end end end; |
А еще была такая функция StrToIntDef
допустим: i= StrToIntDef(edit1->text,0) Если перевело нормально,то работает как обычный StrToInt, иначе i присваевается 0(ну или,что после запятой поставишь) Единственная проблемма,приходится присваивать i целое значение,но в большинстве случаев можно найти значение,которого в реальности быть не может. |
| Часовой пояс GMT +4, время: 20:51. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.