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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2011, 17:47   #1
dina13
 
Аватар для dina13
 
Регистрация: 09.01.2011
Сообщений: 6
Вопрос Работа с компонентами как с массивом

У меня есть 10 компонентов LabeledEdit и 1 Edit. В поле Edit пользователь вводит число от 1 до 10 и в зависимости от этого столько же первых компонентов LabeledEdit должно остаться видимыми, а остальные - невидимыми. Например, пользователь ввёл "3". Тогда
Код:
procedure TForm1.Button18Click(Sender: TObject);
LabeledEdit1.Visible:=true;
LabeledEdit2.Visible:=true;
LabeledEdit3.Visible:=true;
LabeledEdit4.Visible:=false;
LabeledEdit5.Visible:=false;
................................
LabeledEdit10.Visible:=false;
Было бы хорошо это организовать как-то в виде массива, потому что писать 100 строк кода как-то нерационально. Есть ли более простой способ это организовать?

может что-то типа этого:
var LabEd:array[1..10] of .......
for i:=1 to 10 do
LabEd[i]:=TLabeledEdit.Create(Self);

Последний раз редактировалось Stilet; 11.01.2011 в 19:07.
dina13 вне форума Ответить с цитированием
Старый 11.01.2011, 18:10   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Код:
array[1..10] of TWinControl;
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 11.01.2011, 19:09   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Обсуждалось уже.
Вот пример Баламута: http://www.programmersforum.ru/showthread.php?t=18194
Только там поменяй на TLabeledEdit проверяемый тип
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.01.2011, 19:19   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

и пересчитывать индексы из списка Controls в индексы лейблов.. свой массив для этой задачи лучше.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 11.01.2011, 19:27   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
и пересчитывать индексы из списка Controls в индексы лейблов
а это еще зачем?
Хотя я тебя понял, ты имеешь ввиду что автору понадобятся не все LabeledEdit а только некоторые?
Ну в таком случае автору стоит пояснить подробнее, но из того что я понял вполне подойдет решение, предложенное мной. Просто твое решение предполагает заводить этот массив как-то, не думаю что автору это будет удобно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.01.2011, 19:37   #6
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

А твое решение погасит вобще все лейблы на форме, кроме первых трёх в порядке их создания. Независимо от того, где они визуально расположены, и вобще, относятся ли к тем, которые надо гасить. Хотя, может Дине это и надо )
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 12.01.2011, 21:17   #7
dina13
 
Аватар для dina13
 
Регистрация: 09.01.2011
Сообщений: 6
Подмигивание

Хочу ещё показать способ, может не рациональный, но простенький...
procedure TForm1.Button5Click(Sender: TObject);
var i,n:integer;
label 1,2,3,4,5,6,7,8,9,10;
begin
labelededit1.Hide;
labelededit2.Hide;
labelededit3.Hide;
labelededit4.Hide;
labelededit5.Hide;
labelededit6.Hide;
labelededit7.Hide;
labelededit8.Hide;
labelededit9.Hide;
labelededit10.Hide;

n:=strtoint(Edit1.Text);

for i:=1 to n do
begin
case i of
1: labelededit1.Show;
2: labelededit2.Show;
3: labelededit3.Show;
4: labelededit4.Show;
5: labelededit5.Show;
6: labelededit6.Show;
7: labelededit7.Show;
8: labelededit8.Show;
9: labelededit9.Show;
10: labelededit10.Show;
end;
end;
end;
dina13 вне форума Ответить с цитированием
Старый 12.01.2011, 22:20   #8
asmodey1
Подтвердите свой е-майл
 
Регистрация: 19.12.2010
Сообщений: 808
По умолчанию

Как любит говорить Дапкунайте - "Абальдеть !"
Подсказка :
Код:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
    comp: TComponent;
begin
for i:=1 to StrToInt(Edit1.Text) do
begin
comp:=FindComponent('Label'+IntToStr(i));
(comp as TLabel).Visible:=True;
end;
end;
asmodey1 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с динамически создаваемыми компонентами sislexa Общие вопросы Delphi 23 30.10.2010 21:47
Работа с компонентами стороннего приложения imprezident Win Api 1 30.05.2009 22:12
Работа с компонентами Делфи Ainur Помощь студентам 2 22.05.2009 11:56
Работа с компонентами Ky3Heu, Общие вопросы Delphi 2 24.04.2009 11:58
Работа с компонентами Ehlib cherry25 БД в Delphi 4 26.02.2009 10:20