![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
	 | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 У меня есть 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  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Возьмем С - число, введенное в 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;Код: 
	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  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Хочу предложить ещё способ, может не рациональный, но простенький) 
		
	
		
		
		
		
		
		
			Код: 
	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  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 ну можно же не скрывать "не нужные", а просто иметь столько, сколько нужно: 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	Код: 
	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. |