Форум: "Начинающим";
Текущий архив: 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