Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как организовать проверку полей в Delphi в нужном порядке

Delphi , Компоненты и Классы , Компоненты

При разработке приложений на Delphi часто возникает необходимость проверки данных, введенных пользователем, на соответствие определенным критериям. Одной из таких задач является проверка полей в определенном порядке. В стандартной реализации функция ValidateFields проверяет поля в порядке их создания в дизайнере формы. Однако, разработчик может столкнуться с ситуацией, когда необходимо изменить этот порядок. В данной статье мы рассмотрим, как это можно сделать, используя Object Pascal.

Проблема проверки полей

Рассмотрим функцию ValidateFields, которая проверяет, не пусты ли поля ввода:

function TF_config.ValidateFields: Boolean;
var
  i: Integer;
begin
  for i := 0 to ComponentCount - 1 do
  begin
    if (Components[i] is TEdit) then
    begin
      if ((TEdit(Components[i]).Text) = '') then
      begin
        MessageDlg('Введите данные во все поля', mtWarning, [MBOK], 0);
        TEdit(Components[i]).SetFocus;
        Result := False;
        Exit;
      end;
    end;
  end;
  Result := True;
end;

Предположим, что у нас есть поля ID, Name, Address, Phone, Age, и мы хотим проверить их в порядке ID -> Name -> Address -> Age -> Phone. Однако, по умолчанию, порядок проверки соответствует порядку создания компонентов в дизайнере формы, что не всегда удобно.

Решение проблемы

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

Пример использования собственного массива для хранения ссылок на поля ввода:

type
  TF_config = class(TForm)
    ...
    private
    FEditFields: array[0..4] of TEdit;
    procedure FormCreate(Sender: TObject);
    function ValidateFields: Boolean;
    ...
  end;

procedure TF_config.FormCreate(Sender: TObject);
begin
  FEditFields[0] := IDEdit; // ID
  FEditFields[1] := NameEdit; // Name
  FEditFields[2] := AddressEdit; // Address
  FEditFields[3] := AgeEdit; // Age
  FEditFields[4] := PhoneEdit; // Phone
end;

function TF_config.ValidateFields: Boolean;
var
  i: Integer;
begin
  for i := Low(FEditFields) to High(FEditFields) do
  begin
    if FEditFields[i].GetTextLen = 0 then
    begin
      MessageDlg('Введите данные во все поля', mtWarning, [MBOK], 0);
      FEditFields[i].SetFocus;
      Result := False;
      Exit;
    end;
  end;
  Result := True;
end;

Такой подход позволяет не только контролировать порядок проверки, но и упрощает добавление новых полей, так как достаточно добавить ссылку на новое поле в массив FEditFields в методе FormCreate.

Альтернативный подход

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

type
  TF_config = class(TForm)
    ...
    private
    FFields: array[0..4] of TControl;
    function ValidateFields: Boolean;
    ...
  end;

procedure TF_config.FormCreate(Sender: TObject);
begin
  FFields[0] := IDEdit;
  FFields[1] := NameEdit;
  FFields[2] := AddressEdit;
  FFields[3] := AgeEdit;
  FFields[4] := PhoneEdit;
  // Добавление других типов контролов, например ComboBox
  // FFields[5] := ComboBox1;
  // ...
end;

function TF_config.ValidateFields: Boolean;
var
  i: Integer;
  ctrl: TControl;
begin
  Result := True;
  for i := Low(FFields) to High(FFields) do
  begin
    ctrl := FFields[i];
    if ctrl is TCustomEdit then // Обработка TEdit и TMemo
    begin
      if TCustomEdit(ctrl).GetTextLen = 0 then
      begin
        Result := False;
        Break;
      end;
    end
    else if ctrl is TComboBox then // Обработка TComboBox
    begin
      if TComboBox(ctrl).ItemIndex = -1 then
      begin
        Result := False;
        Break;
      end;
    end
    // Добавление других типов проверок
    // ...
  end;
  if not Result then
  begin
    MessageDlg('Введите данные во все поля', mtWarning, [MBOK], 0);
    ctrl.SetFocus;
  end;
end;

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

Заключение

Использование собственного списка компонентов для проверки полей ввода позволяет разработчику контролировать порядок проверки, что является ключевым фактором в обеспечении удобства и логичности пользовательского интерфейса. Приведенные примеры кода на Object Pascal демонстрируют, как можно организовать проверку полей в нужном порядке в приложениях на Delphi.

Создано по материалам из источника по ссылке.

В статье рассматривается проблема и решения для организации проверки полей ввода в приложениях на Delphi в заданном порядке, независимо от порядка их создания в дизайнере формы.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Компоненты ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-07-16 03:06:30/0.0037140846252441/0