Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.01.2011, 17:44
Аватар для nattaella
nattaella nattaella вне форума
Прохожий
 
Регистрация: 10.01.2011
Сообщения: 12
Репутация: 10
Вопрос Работа с компонентами как с массивами

У меня есть 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);
Ответить с цитированием
  #2  
Старый 11.01.2011, 17:55
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 660
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Возьмем С - число, введенное в Edit1

Предлагаю три идентичных варианта:
1. Если хотите обращаться к LabeledEdit по имени, то
Код:
var 
  i: Integer;
  le: TLabeledEdit;
begin
  ...
  for i := 1 to 10 do
  begin
    le := FindComponent('LabeledEdit' + IntToStr(i));
    if le <> nil then 
    begin 
      if i <= C then le.Show
      else le.Hide;
    end;
  end;
  ...
end;
2. Если хотите обращаться к LabeledEdit как к массиву, то:
Код:
var
  i: Integer;
  le: array [1..10] of TLabeledEdit;
begin
  le[1] := LabeledEdit1;
  ...
  le[10] := LabeledEdit10;
  for i := 1 to 10 do
  if i <= C then le[i].Show
  le[i].Hide;
end;
3. Ну а этот способ такой же как и №2, за исключением, что все LabeledEdit-ы создаются динамически, а не в ДизайнТайм. Но это уже другой вопрос, ответ на который Вы сможете найти на форуме.
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.
Ответить с цитированием
  #3  
Старый 12.01.2011, 21:21
Аватар для nattaella
nattaella nattaella вне форума
Прохожий
 
Регистрация: 10.01.2011
Сообщения: 12
Репутация: 10
Подмигивание

Хочу предложить ещё способ, может не рациональный, но простенький)
Код:
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;
Админ: Пользуемся тегами, иначе последуют санкции!

Последний раз редактировалось Admin, 12.01.2011 в 21:43.
Ответить с цитированием
  #4  
Старый 13.01.2011, 09:52
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

ну можно же не скрывать "не нужные", а просто иметь столько, сколько нужно:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    ScrollBox1: TScrollBox;
    procedure Edit1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Edit1Change(Sender: TObject);
var
  n: Integer;
  i: Integer;
begin
  n:=StrToIntDef(Edit1.Text, 0);
  while ScrollBox1.ControlCount>0 do ScrollBox1.Controls[0].Free;
  for i:=0 to n-1 do
  with TLabeledEdit.Create(Self) do
  begin
    Parent:=ScrollBox1;
    EditLabel.Caption:='TLabeledEdit'+IntToStr(i);
    Text:='TLabeledEdit'+IntToStr(i);
    Top:=i*Height*2+Height;
  end;
end;

end.
http://data.cod.ru/84041
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:12.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter