Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.11.07;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.005 c
8-1207586026
NaRuTo
2008-04-07 20:33
2010.11.07
FadeOut в DirectX


15-1280401937
dmk
2010-07-29 15:12
2010.11.07
Презентация MS DOS 4.01 в СССР


8-1180443656
borodaj
2007-05-29 17:00
2010.11.07
еще вопрос по изображениям )


15-1280176169
Юрий
2010-07-27 00:29
2010.11.07
С днем рождения ! 27 июля 2010 вторник


15-1280332456
Baks
2010-07-28 19:54
2010.11.07
Как правильно разбить строку?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский