PDA

View Full Version : استفاده از for برای مقداردهی به label ها



smt1383
یک شنبه 19 مهر 1388, 09:01 صبح
با سلام خدمت دوستان
من در یک فرم تعداد 50 تا کنترل label به نام های label1 تا label50 دارم. در ضمن یک آرایه 50 تایی به نام myarr دارم. حال می خواهم به ترتیب label1 تا label50 مقادیر myarr[1] تا myarr[50] را اختیار کنند. اما با استفاده از یک دستور for و نه با 50 بار نوشتن دستور label1.caption:=myarr[1]

vcldeveloper
یک شنبه 19 مهر 1388, 09:22 صبح
قبلا چند ده باری جواب داده شده:


var
I: Integer;
Form : TForm;
begin
Form := Form1;
for I := 0 to Form.ComponentCount - 1 do
if Form.Components[i] is TLabel then
TLabel(Form.Components[i]).Caption := 'myarr'+IntToStr(I);
end;

smt1383
یک شنبه 19 مهر 1388, 10:42 صبح
ممنون آقای کشاورز
تا اینجا را می دانستم. اما می خواهم فقط label هایی در نظر گرفته شوند که با نام label شروع می شوند. مانند label1 تا label50. چون داخل فرم label های دیگری هم وجود دارند با نام های دیگر مثلاً my label و ...
با تشکر

Mahmood_M
یک شنبه 19 مهر 1388, 14:27 عصر
Procedure زیر می تونه راه حل باشه :

ویرایش شد ...
procedure TMainFrm.SetLabelCaption;
var
I, N : Integer;
LName : String;
begin
N := 1;
for I := 0 to ComponentCount - 1 do
begin
if TComponent(Components[I]).ClassName = 'TLabel' then
begin
LName := 'Label'+IntToStr(N);
if TLabel(Components[I]).Name = LName then
begin
TLabel(Components[I]).Caption := 'Arr' + IntToStr(N);
N := N+1;
end;
end;
end;
end;

این Procedure رو در قسمت Public فرم تعریف کنید و به عنوان مثال به این صورت ازش استفاده کنید :

ویرایش شد ...
procedure TMainFrm.BitBtn1Click(Sender: TObject);
begin
SetLabelCaption;
end;

این هم یک مثال : لینک دانلود (http://nabegheh.parsaspace.com/Examples/SetLBCaption.rar)

موفق باشید ...

Mahmood_M
یک شنبه 19 مهر 1388, 14:34 عصر
ببخشید حواسم نبود ، اون LabelCount اضافی هست ، اول با یک روش دیگه نوشته بودم که بعد عوضش کردم ، یعنی الآن Procedure رو به این صورت بنویسید : ( تعداد Label ها مشخص نباشه باز مشکلی نیست )


procedure TMainFrm.SetLabelCaption;


پست قبلی رو ویرایش میکنم ...

موفق باشید ...

AbiriAmir
یک شنبه 19 مهر 1388, 16:46 عصر
var
a: integer;
b : TLabel;



For a:= 1 to 50 do
begin
b := self.FindComponent('Label' + IntToStr(a)) as TLabel;
b.Caption := 'هر چه میخواهد دل تنگت';
end;