Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.14;
Скачать: CL | DM;

Вниз

Присвоение значений Edit через цикл   Найти похожие ветки 

 
Леха   (2005-05-31 16:35) [0]

Вот уверен простая задачка, которую многие из вас решили. Подскажите как решается, если не трудно. Что достаточно использовать цикл или и цикл и массив.
На форме имеется напр. 3 edit"a
edit1, edit2, edit3.
Как по нажатию на кнопку обнулить Edit*.text у всех.
Я, пока не понял.


 
BFG9k ©   (2005-05-31 16:39) [1]


for i:=0 to ComponentCount-1 do
 if Components[i] is TEdit then
   (Components[i] as TEdit).Text:="";



 
_dimka   (2005-05-31 16:39) [2]

Ну например так :
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
for i:=0 to Form1.ControlCount-1 do
if Form1.Components[i] is TEdit then (Form1.Components[i] as TEdit).Text:="";
end;


 
begin...end ©   (2005-05-31 16:40) [3]

В методе формы:

for i := 0 to ComponentCount - 1 do
 if Components[i].ClassName = "TEdit" then
   TEdit(Components[i]).Clear

--------------------
Sorry, I"m drunk now


 
Гаврила ©   (2005-05-31 16:41) [4]

У формы (равно как и у всех компонентов) есть список "компонентов - дочек"
For i:=0 to Form1.ComponentCount - 1 do
 begin
  if Form1.Components[i] is TEdit then
    TEdit(Form1.Components[i]).text:=


 
Игорь Шевченко ©   (2005-05-31 16:41) [5]

еще две копейки: вместо if (xxxx is yyyy) then (xxxx as yyyy).zzz достаточно писать yyyy(xxxx).zzz

_dimka   (31.05.05 16:39) [2]

Не надо использовать глобальные переменные внутри метода объекта


 
Леха   (2005-05-31 16:44) [6]

Спасибо. Все работает, класс. Но это как я понял очищает все едиты. А как очистить напр. только edit1, edit2, edit3, а остальные не трогать?


 
BFG9k ©   (2005-05-31 16:44) [7]

Удалено модератором


 
begin...end ©   (2005-05-31 16:45) [8]

> Игорь Шевченко ©   (31.05.05 16:41) [5]

> вместо if (xxxx is yyyy) then (xxxx as yyyy).zzz достаточно
> писать yyyy(xxxx).zzz

В смысле? Проверка типа класса не нужна? Почему?


 
BFG9k ©   (2005-05-31 16:46) [9]

2 Леха :

if Components[i].Name="edit1" then
...

И по аналогии ...


 
_dimka   (2005-05-31 16:49) [10]


> Игорь Шевченко ©   (31.05.05 16:41)

Извиняюсь опечатался :)

> еще две копейки: вместо if (xxxx is yyyy) then (xxxx as
> yyyy).zzz достаточно писать yyyy(xxxx).zzz

if (xxxx is yyyy) then
Всё равно надо... А то если у нас будет стоять например там Мемо то оно тоже очиститься...


 
_dimka   (2005-05-31 16:49) [11]


> Игорь Шевченко ©   (31.05.05 16:41)

Извиняюсь опечатался :)

> еще две копейки: вместо if (xxxx is yyyy) then (xxxx as
> yyyy).zzz достаточно писать yyyy(xxxx).zzz

if (xxxx is yyyy) then
Всё равно надо... А то если у нас будет стоять например там Мемо то оно тоже очиститься...


 
Bronco ©   (2005-05-31 16:51) [12]


> Леха   (31.05.05 16:44) [6]
> Спасибо. Все работает, класс. Но это как я понял очищает
> все едиты. А как очистить напр. только edit1, edit2, edit3,
> а остальные не трогать?


Не парься.
 Edit1.Clear;
 Edit2.Clear;
 Edit3.Clear;
В твоем случае так проще :-)


 
_dimka   (2005-05-31 16:54) [13]


> Bronco ©   (31.05.05 16:51)

А если у него не 3 Едита а 33 8-)


 
Леха   (2005-05-31 16:54) [14]

Bronco. Так я умею. Интересовало именно как очистить через цикл.


 
Игорь Шевченко ©   (2005-05-31 16:57) [15]

begin...end ©   (31.05.05 16:45) [8]

Слишком рано отправил. Имел в виду, что после проверки нет нужды вызывать as


 
Anatoly Podgoretsky ©   (2005-05-31 16:57) [16]

Леха   (31.05.05 16:54) [14]
А зачем это самый эффективные и самый управляемый путь.


 
begin...end ©   (2005-05-31 16:58) [17]

> Леха   (31.05.05 16:44) [6]

uses StrUtils;

const
 Names: array [1..3] of string = ("Edit1", "Edit2", "Edit3");
var
 i: integer;
begin
 for i := 0 to ComponentCount - 1 do
   if (Components[i].ClassName = "TEdit") and (AnsiIndexStr(Components[i].Name, Names) >= 0) then
     TEdit(Components[i]).Clear
end.


 
Anatoly Podgoretsky ©   (2005-05-31 16:58) [18]

Леха   (31.05.05 16:35)  
Вот уверен простая задачка, которую многие из вас решили.

Зачем, нам ее не задавали.


 
Marser ©   (2005-05-31 17:04) [19]


> Игорь Шевченко ©   (31.05.05 16:41) [5]
> еще две копейки: вместо if (xxxx is yyyy) then (xxxx as
> yyyy).zzz достаточно писать yyyy(xxxx).zzz

Угу, только за что-то вроде tlabel(edit1).Canvas.LineTo(23,23) можно хорошо получить по рукам(что и неудивительно). Хотя приведения Caption<=>Text проходят нормально.


 
Игорь Шевченко ©   (2005-05-31 17:13) [20]

Marser ©   (31.05.05 17:04) [19]

Читать пост [15]


 
begin...end ©   (2005-05-31 17:17) [21]

> Marser ©   (31.05.05 17:04) [19]

> Хотя приведения Caption<=>Text проходят нормально.

Это счастливое совпадение. В обоих случаях вызывается TControl.SetText.


 
Marser ©   (2005-05-31 17:29) [22]


> Игорь Шевченко ©   (31.05.05 17:13) [20]
> Marser ©   (31.05.05 17:04) [19]
>
> Читать пост [15]

Уже вижу :-)


> Это счастливое совпадение. В обоих случаях вызывается TControl.SetText.

Угу.



Страницы: 1 вся ветка

Текущий архив: 2005.06.14;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.028 c
14-1117023904
cyborg
2005-05-25 16:25
2005.06.14
Сейчас новости шестичасовые по первому были


1-1117525901
Layner
2005-05-31 11:51
2005.06.14
Здравствуйте, подскажите плз, как программно установить ListView


14-1117195061
Alena
2005-05-27 15:57
2005.06.14
Не работает exe-шник


14-1116855278
DiamondShark
2005-05-23 17:34
2005.06.14
Когда человек смеётся?


3-1115493471
Yurisimus
2005-05-07 23:17
2005.06.14
Как в Fast Report получить данные из двух таблиц...