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

Вниз

Обращение к компонентам в цикле   Найти похожие ветки 

 
Sergei LM   (2010-08-11 17:37) [0]

Уважаемые мастера, на форме есть N Lable, поименованных от L1 до LN соответственно. Можно ли избавиться от множества кострукций L1.Caption := AnyThing, а все сделать в цикле от 1 до N ?


 
Сергей М. ©   (2010-08-11 18:27) [1]

TLabel(MyForm.FindComponent(Format("L%u", [i]))).Caption := AnyThing;


 
Игорь Шевченко ©   (2010-08-11 18:46) [2]

Сергей М. ©   (11.08.10 18:27) [1]

лучше as


 
KilkennyCat ©   (2010-08-11 21:48) [3]


> Игорь Шевченко ©   (11.08.10 18:46) [2]

а кстати, чем? я опять забыл... что-то типа из-за перебора только нужных вместо всех?


 
Игорь Шевченко ©   (2010-08-11 23:03) [4]

KilkennyCat ©   (11.08.10 21:48) [3]

Тем, что Exception выдаст, если компонент окажется, паче чаяния, не тем.

Для перебора только нужных хорошо использовать перечислители

например:
http://www.thedelphigeek.com/2008/02/twincontrolcontrols-enumerator.html


 
KilkennyCat ©   (2010-08-12 01:46) [5]


> Игорь Шевченко ©   (11.08.10 23:03) [4]

спасибо.


 
12 ©   (2010-08-12 08:28) [6]

почему не is?

if MyForm.FindComponent(Format("L%u", [i])) is TLabel
then TLabel(MyForm.FindComponent(Format("L%u", [i]))).Caption := AnyThing;


 
MBo ©   (2010-08-12 09:09) [7]

>почему не is?
Если проверка is делается, то простого приведения типа достаточно, а если не делается, то лучше as использовать


 
Palladin ©   (2010-08-12 10:36) [8]

As нужен программисту для самотестирования. Когда контейнер по определению должен содержать объекты определенного типа. В этом случае вызываемое исключение абсолютно оправдано.

Is нужен программисту для выбора как поступить с объектом.

Вот и все.


 
12 ©   (2010-08-12 10:48) [9]

понятное дело, просто к чему -
 if Sender is TButton then
   TButton(Sender).Caption := "qwqwq";
никогда не вызовет исключения

а
(Sender as TButton).Caption := "ererer";
может

procedure TForm1.Button1Click(Sender: TObject);
begin
 if Sender is TButton then
   TButton(Sender).Caption := "qwqwq";
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 (Sender as TButton).Caption := "ererer";
end;

procedure TForm1.Image1Click(Sender: TObject);
begin
 Button1.OnClick(Sender);
 Button2.OnClick(Sender);
end;


 
Ega23 ©   (2010-08-12 10:54) [10]


> никогда не вызовет исключения
> а
> (Sender as TButton).Caption := "ererer";
> может


И в первом случае ты не узнаешь, что к тебе что-то не то пришло. А вот втором - сразу.


 
kukuikar ©   (2010-08-12 10:59) [11]


   var  
     i:integer;  
   begin  
     for i:=0 to ComponentCount-1 do  
       if Components[i] is TLabel then  
         Memo1.Lines.Add((Components[i] as TLabel).Caption);  
   end;  


http://parsers.info/2009/12/perechislenie-vsex-komponentov-na-forme/


 
12 ©   (2010-08-12 11:05) [12]


> в первом случае ты не узнаешь, что к тебе что-то не то пришло.
>  А вот втором - сразу.

Не..
Это как я сижу дома, а ко мне приходят. Гербалайфщик и почтально
в первом - да и не надо приходить, раз я тебя не жду. Просто не слышу когда гербалайф звонит

во втором - приходит гербалайфщик, я -о! и подставляю руки для письма, а туда реклама, реклама, реклама, реклама,


 
Игорь Шевченко ©   (2010-08-12 11:06) [13]


>        if Components[i] is TLabel then  
>          Memo1.Lines.Add((Components[i] as TLabel).Caption);
>  


Он себе и лоб разобьет


 
12 ©   (2010-08-12 11:06) [14]


>        if Components[i] is TLabel then  
>          Memo1.Lines.Add((Components[i] as TLabel).Caption);
>  

тут лишнее as
уже проверил is до этого
быстрее будет
>        if Components[i] is TLabel then  
>          Memo1.Lines.Add(TLabel(Components[i])).Caption);


 
kukuikar ©   (2010-08-12 11:14) [15]

12 ©   (12.08.10 11:06) [14]
да пожалуйста, это был просто копи/паст, самый простой пример


 
Ega23 ©   (2010-08-12 12:03) [16]


> Не..
> Это как я сижу дома, а ко мне приходят. Гербалайфщик и почтально
> в первом - да и не надо приходить, раз я тебя не жду. Просто
> не слышу когда гербалайф звонит
>
> во втором - приходит гербалайфщик, я -о! и подставляю руки
> для письма, а туда реклама, реклама, реклама, реклама,


А ты представь, что к тебе должен приходить ТОЛЬКО почтальон, и никто более. Всех остальных должно КГБ расстреливать на месте.
Во тогда - as. Пришло что-то не то - отпись в лог и разбирайся, что же тебе там такое пришло.
А вот если и почтальон, и весёлый молочник, и клоуны и проститутками и ещё пионеры для сбора макулатуры - вот тогда is. А, типа, все иначе - Error. Собственно, так TPersistent.Assign устроен.


 
brother ©   (2010-08-12 12:14) [17]

> [16] Ega23 ©   (12.08.10 12:03)

Супер! Прям так наглядно ;) +5!


 
12 ©   (2010-08-12 12:33) [18]


> А ты представь, что к тебе должен приходить ТОЛЬКО почтальон,
>  и никто более. Всех остальных должно КГБ расстреливать
> на месте.
>


ну тогда так надо :)

>  if Sender is TButton then
>    TButton(Sender).Caption := "qwqwq"
  else KGB.Create(Sender);


 
KilkennyCat ©   (2010-08-12 12:40) [19]


> А вот если и почтальон, и весёлый молочник, и клоуны и проститутками
> и ещё пионеры для сбора макулатуры

везет же некоторым! ко мне только свидетели иеговские приходили...


 
Плохиш ©   (2010-08-12 13:06) [20]


> kukuikar ©   (12.08.10 10:59) [11]

И как это отвечает на вопрос автора ветки?


 
Игорь Шевченко ©   (2010-08-12 13:24) [21]


>  ко мне только свидетели иеговские приходили...


Это явный Exception


 
Anatoly Podgoretsky ©   (2010-08-12 16:04) [22]

> Игорь Шевченко  (12.08.2010 13:24:21)  [21]

AV


 
kukuikar ©   (2010-08-13 13:55) [23]


> Плохиш ©   (12.08.10 13:06) [20]
>
>
> > kukuikar ©   (12.08.10 10:59) [11]
>
> И как это отвечает на вопрос автора ветки?

а Вы хотите чтобы я написал точный ответ на вопрос и нарушил главное правило форума?


 
brother ©   (2010-08-16 12:14) [24]

> нарушил главное правило форума?

какое?


 
Anatoly Podgoretsky ©   (2010-08-16 14:42) [25]

Он думает, что он знает волшебный код.


 
kukuikar ©   (2010-08-16 16:31) [26]


> brother ©   (16.08.10 12:14) [24]
>
> > нарушил главное правило форума?
>
> какое?

отвечать по формальному признаку



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

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

Наверх




Память: 0.53 MB
Время: 0.01 c
15-1280332456
Baks
2010-07-28 19:54
2010.11.07
Как правильно разбить строку?


6-1228811420
Добежал
2008-12-09 11:30
2010.11.07
Ошибка в TIdHTTPServer


2-1281765808
Fr
2010-08-14 10:03
2010.11.07
Ping хоста


15-1280391894
Polkin
2010-07-29 12:24
2010.11.07
Из шланга в цивилиацию.


2-1281504230
Irisss
2010-08-11 09:23
2010.11.07
Открыт ли файл Excel