edit delphi



Edit в делфи

Автор Аццкий скорпиончег задал вопрос в разделе Другие языки и технологии

Проверка Edit в Delphi и получил лучший ответ

Ответ от Gennady[гуру]
Доброго времени суток.
Трудно не зная тонкостей задачи дать вменяемый ответ. Попробую в качестве примера показать куски из рабочего проекта. На форме несколько экземпляров TEdit, корректными значениями которых являются только цифры. Процесс расчета запускается по нажатию кнопки. Обработчик клика делаем таким.
procedure TForm1.btnCalcClick(Sender: TObject);
begin
if not (ValidData(i1, Edit1) and
ValidData(i2, Edit2) and
ValidData(i3, Edit3) and
ValidData(i4, Edit4) and
ValidData(i5, Edit5)) then Exit;
if (ActionID < 9) or (btnCalc.Caption = 'Принять') then AddElements
else CalcIntersect;
end;
i1 .. i5 - локальные поля формы (не спрашивайте почему так сделано) . Т. е. перед запуском вычислений просто проверяем содержимое едитов. Эта миссия возложена на метод
function TForm1.ValidData(var i: Longint; Edit: TEdit): Boolean;
begin
Result := True;
if Edit.Visible then begin
try
i := StrToInt(Edit.Text);
except
DrawErrMessage(ErrMsg[eMsgDataError]);
ActiveControl := Edit;
Result := False;
end;
end;
end;
В методе проверяется видимость элемента, поскольку в различных ситуациях некоторые могут быть скрыты. Далее выполняется попытка преобразовать текст в число. При ошибке выводится сообщение, фокус устанавливается на едит с "левыми" данными и все завершается.
Пару слов о том, как не дать ввести в едит не цифры.
Реализуем пару функций. Причем даже не методами формы.
function CheckKey(Key: Char): Char;
begin
Result := Chr(0);
case Key of
'0'..'9', #8 : Result := Key; // цифры и <backspace>
end;
end;
function CorrectText(s: String; Idx: Longint ): String;
begin
Result := s;
Delete(Result, Idx, 1);
end;
А обработчики делаем такими.
procedure TForm1.KeyPress(Sender: TObject; var Key: Char);
begin
Key := CheckKey(Key);
end;
В принципе, реализацию функции CheckKey можно было внести в этот обработчик, но просто она используется еще в других местах.
procedure TForm1.TextChanged(Sender: TObject);
const
ValidChar : Set of Char = ['0'..'9'];
var
i : Longint;
begin
for i:=1 to Length((Sender as TEdit).Text) do begin
if not ((Sender as TEdit).Text[ i ] in ValidChar) then
if (i > 0) and (i <= Length((Sender as TEdit).Text)) then begin
(Sender as TEdit).Text := CorrectText((Sender as TEdit).Text, i);
(Sender as TEdit).SelStart := i - 1;
// Beep;
Break;
end;
end;
end;
Первый из них вешаем на событие OnKeyPress, а второй на OnChange всех едитов. Эти пляски в результате дают то, что в едит невозможно запихать не цифру. Причем не только путем ввода с клавы, но и посредством вставки из буфера обмена.
Если у вас иной смысл корректности данных, то, думаю, и в этом случае возможно использовать подобный подход.
Надеюсь, что хоть немного помог.
Удачи!
Gennady
Гений
(51339)
🙂 Тоже вариант. А если в едите что-то будет? Ну, не пустая строка, а какой-нить мусор? Проверяйте все-таки именно на корректность данные, а не просто на наличие чего-то.

Ответ от Ним[гуру]
if pos(строка, символ) <>0 then?

Ответ от 22 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: Проверка Edit в Delphi
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*