PDA

View Full Version : خواندن مقادير چكباكسها با يك حلقه



bmanfy
پنج شنبه 29 مرداد 1388, 09:44 صبح
سلام دوستان :
فرمي دارم شامل چند پنل كه در هر پنل حدود 400 تا چك باكس قرارداره . چهطور ميتونم مقادير هر كدام از اين گروه چكباكسها را با يك حلقه بخوانم .
امكاني مثل Vb كه اشيا رو به صورت ارايه اي تعريف ميكنه وجود نداره ؟

Felony
پنج شنبه 29 مرداد 1388, 10:19 صبح
به وسیله ی کدی زیر که براتون نوشتم میتونید تمام مقادیر Edit های روی فرمتون رو به صورت عددی با هم جمع کنید .

var
Temp,i:integer;
begin
for i:=0 to ComponentCount-1 do
if Components[i].ClassType=TEdit then
Temp:=Temp+StrToInt(TEdit(Components[i]).Text);
Button1.Caption:=IntToStr(Temp);
end;

hadisalahi2
پنج شنبه 29 مرداد 1388, 13:22 عصر
در تکمیل راهنمایی دوست عزیزم
البته اگه اون 40 نا چک باکس رو با استفاده از checklistBox اگه روی فرم بگذاری هم مدیریتش و هم خوندنش خیلی راحت تره.
من پیشنهاد میکنم از checklistBox استفاده کنی.
یا حق

Felony
پنج شنبه 29 مرداد 1388, 13:38 عصر
ببخشید دوست عزیز ، من سرم شلوغ بود نمونه رو استباه نوشتم ، فکر کردم میخواین مقادیر داخل Edit ها رو بخونید ، یه کد دیگه براتون نوشتم که مقادیر 10 تا چک باکس رو میخونه و اگه تیک خورده باشن تو آرایه True و اگر تیک نخورده باشن False میزاره .


procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
Temp:boolean;
Check:Array [1..10] of Boolean;
begin
for i:=0 to ComponentCount-1 do begin
if Components[i].ClassType=TCheckBox then begin
Temp:=TCheckBox(Components[i]).Checked;
Check[i]:=Temp;
end;
end;
end;

hadisalahi2
پنج شنبه 29 مرداد 1388, 13:40 عصر
البته از این روش هم میتونی استفاده کنی



Procedure UnChecked;
var i:Byte;
begin
For i := 0 To ComponentCount-2 Do
If Components[i] is TCheckBox Then
TCheckBox(Components[i]).Checked:=False;;
end;


من از این کد برای Uncheck کردن گروهی از چک باکس ها استفاده میکنم. حالا شما میتونی به جای اون خاصیت Checked هر خاصیتی رو که دوست داری بگذاری و عملیات مورد نظر رو هم انجام بدی
یا حق

bmanfy
پنج شنبه 29 مرداد 1388, 22:27 عصر
با تشكر از پاسخ هاتون .
بله . اما نگفتيد چطور فقط چك باكس هاي يك Panel رو بخونم .
كد زير جوابش صفر ميشه !!!!!


Panel1.ComponentCount;

hadisalahi2
جمعه 30 مرداد 1388, 12:18 عصر
البته شما باید رنج شماره کامپوننت هاتون رو بدونید ، اینطوری احتیاجی نیست که مشخص کنید روی پنل باشه یا روی فرم.

Felony
جمعه 30 مرداد 1388, 12:28 عصر
با تشكر از پاسخ هاتون .
بله . اما نگفتيد چطور فقط چك باكس هاي يك Panel رو بخونم .
كد زير جوابش صفر ميشه !!!!!
وقتی میخواین تعداد کامپوننت های موجود روی یک Panel یا GroupBox رو بخونید باید از متد ControlCount اونها استفاده کنید نه ComponentCont .


Panel1.ControlCount