Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.09.2012, 21:06   #1
Corpuscul
Пользователь
 
Регистрация: 21.09.2012
Сообщений: 35
Вопрос Очистка нескольких полей Edit (Delphi2009)

Всем доброго времени суток. На форме есть несколько полей Edit как бы мне их очистить, избегая такого кода
Код:
 
edt1.Clear;
edt2.Clear;
edt3.Clear;
Corpuscul вне форума Ответить с цитированием
Старый 26.09.2012, 21:48   #2
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Код:
edit1.text:='';
не?
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 26.09.2012, 22:47   #3
Corpuscul
Пользователь
 
Регистрация: 21.09.2012
Сообщений: 35
По умолчанию

Цитата:
Сообщение от whatever Посмотреть сообщение
Код:
edit1.text:='';
не?
Нет, потому что надо очистить несколько полей (порядка 15), я могу конечно прописать
Код:
edt1.Clear;
edt2.Clear;
edt3.Clear;
...
edt20.Clear;
или
Код:
edit1.text:='';
edit2.text:='';
...
edit20.text:='';
Но во-первых некрасиво, а во-вторых если полей будет порядка 100 или 1000? Можно же наверное через цикл как-то сделать?
Corpuscul вне форума Ответить с цитированием
Старый 26.09.2012, 22:58   #4
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Вообще вопрос интересный. Немного погуглил, пришел вот к чему:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Button1: TButton;
    procedure clredit(Sender: TObject);
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  clredit(form1);
end;

procedure TForm1.clredit(Sender: TObject);
var
  i: integer;
begin
  for i:=0 to ComponentCount-1 do
    if (Components[i] is TEdit) then 
      (Components[i] as TEdit).Clear;
end;
end.
На форму бросил четыре Edit'а и одну кнопку, все работает.
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 26.09.2012, 23:13   #5
Corpuscul
Пользователь
 
Регистрация: 21.09.2012
Сообщений: 35
По умолчанию

Если я правильно понимаю, то здесь очищаются все поля Edit в Form1, а если мне надо очистить выборочно, то поля Edit надо кинуть хотя бы на панель или что - то подобное, чтобы не очищать остальные поля формы?
Corpuscul вне форума Ответить с цитированием
Старый 26.09.2012, 23:25   #6
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Как раз для тебя
Цитата:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  for i := 0 to ComponentCount - 1 do
    if (Components[i] is TEdit) and ((Components[i] as TEdit).Parent = Panel1) then
      (Components[i] as TEdit).Clear;
end;
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 26.09.2012, 23:30   #7
Corpuscul
Пользователь
 
Регистрация: 21.09.2012
Сообщений: 35
По умолчанию

Хе-хе, точно! Спасибо!
Corpuscul вне форума Ответить с цитированием
Старый 27.09.2012, 00:04   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
а если мне надо очистить выборочно
как вариант, у компонента TEdit есть свойство tag (челочисленное). Можно присвоить определённое значение тем Edit'ам на форме, которые надо почистить.
например, пусть мы в дизайнере в поле tag нужным полям занесли tag = 222
тогда:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  for i := 0 to ComponentCount - 1 do
    if (Components[i] is TEdit) and ((Components[i] as TEdit).tag = 222) then
      (Components[i] as TEdit).Clear;
end;
p.s. конечно, вариант с панелью ничем не лучше и не хуже, использование поля tag просто другой способ решить ту же задачу...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.09.2012, 17:23   #9
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Ну я это написал и пользуюсь:
Код:
function IsList(Name_ :string; List_ :array of string):Boolean;
var
  I,II :LongInt;
  Buf0 :string;
begin
  Result := False;
 if Length(List_) <= 0 then
  Exit;
 for I := Low(List_) to High(List_) do
 begin
   Buf0 := AnsiLowerCase(List_[I]);
  if AnsiLowerCase(Name_) = Buf0 then
  begin
    Result := True;
    Break;
  end;
 end;
end;

procedure EnabDisabComponent(StartComponent :TComponent; ListName :array of string;
                             Enabl :Boolean=True);
var
  I,II :LongInt;
  B :Boolean; // результат сравнения имён
  Buf :string; // текущее имя компонента считаное
  Com0, Com1 :TComponent;
begin
 if StartComponent = nil then
  Exit;
 if Length(ListName) <= 0 then
  Exit;
 Com0 := StartComponent;
 II := Com0.ComponentCount;
 if II>0 then
 begin
  for I := 0 to II - 1 do
  begin
    Buf := Com0.Components[I].Name;
   if IsList(Buf, ListName) then
   begin
     Com1 := Com0.Components[I];
      try
     TControl(Com1).Enabled := Enabl;
      except
      end;
   end;
  end;
 end;
end;

//Использование:
 EnabDisabComponent(Form1, ['sLabel12', 'Edit1', 'sLabel13', 'Edit2',
                            'sLabel14', 'Edit3', 'sLabel15', 'Edit4',
                            'ChBox3'],
                    ChBox1.Checked);
Переделано специально для очистки, если не охото менять код сверху
Код:
var
  Form1: TForm1;
  function IsList(Name_ :string; List_ :array of string):Boolean;
  procedure SetEdtTxtCtrl(StartComponent :TComponent; ListName :array of string;
                          Txt :string = '');

implementation

{$R *.dfm}

function IsList(Name_ :string; List_ :array of string):Boolean;
var
  I,II :LongInt;
  Buf0 :string;
begin
  Result := False;
 if Length(List_) <= 0 then
  Exit;
 for I := Low(List_) to High(List_) do
 begin
   Buf0 := AnsiLowerCase(List_[I]);
  if AnsiLowerCase(Name_) = Buf0 then
  begin
    Result := True;
    Break;
  end;
 end;
end;

procedure SetEdtTxtCtrl(StartComponent :TComponent; ListName :array of string;
                        Txt :string);
var
  I,II :LongInt;
  B :Boolean; // результат сравнения имён
  Buf :string; // текущее имя компонента считаное
  Com0, Com1 :TComponent;
begin
 if StartComponent = nil then
  Exit;
 if Length(ListName) <= 0 then
  Exit;
 Com0 := StartComponent;
 II := Com0.ComponentCount;
 if II>0 then
 begin
  for I := 0 to II - 1 do
  begin
    Buf := Com0.Components[I].Name;
   if IsList(Buf, ListName) then
   begin
     Com1 := Com0.Components[I];
     if (Com1 is TEdit) then
      try
     TEdit(Com1).Text := Txt;
      except
      end;
   end;
  end;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  SetEdtTxtCtrl(Form1, ['Edit1', 'Edit2', 'Edit3', 'Edit4', 'Edit5', 'Edit6',
                        'Edit7', 'Edit8', 'Edit9', 'Edit10', 'Edit11', 'Edit12',
                        'Edit13', 'Edit14', 'Edit15', 'Edit16', 'Edit17',
                        'Edit18', 'Edit19', 'Edit20'],
                '');
end;

Последний раз редактировалось Alter; 27.09.2012 в 19:13.
Alter вне форума Ответить с цитированием
Старый 25.02.2017, 15:43   #10
095
Пользователь
 
Регистрация: 03.10.2007
Сообщений: 19
По умолчанию

whatever, а что делать если delphi запрещает добавлять эту процедуру?
http://joxi.ru/1A5WxZzhnJNQem.jpg
Как это обойти?
095 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дублирование полей в нескольких таблицах и их заполнение MIKE11IPME БД в Delphi 7 24.04.2012 20:26
Очистка сразу нескольких StringGrid Artamos Компоненты Delphi 7 13.05.2011 13:58
Очистка полей на форме с кнопки vlad_stv Microsoft Office Access 6 03.03.2010 13:37
Объеденение полей запроса в для отображения нескольких полей в одном списке mrCreator Microsoft Office Access 3 08.08.2009 00:53
Очистка Edit Шура Помощь студентам 2 01.12.2008 19:18