PDA

View Full Version : سوال: مشکل در پاک کردن اشیا روی فرم



joooje
پنج شنبه 26 مرداد 1391, 13:56 عصر
با سلام به دوستان

من با دستور Create چندین شی رو توی فرمم ایجاد میکنم (تو فرم 2 که خودش parent شىه تو فرم 1):



with TEdit.Create(form1) do
begin
Parent := form2;
Name := 'M'+inttostr(NumMeb);
Text := '';
OnClick:= MyEditClick;
left:=5;
top:=5;
Width:=100;
Height:=21;
Color:= clWhite;
Font.Color:= clBlack;
Cursor:=crDrag;
Font.Name:='Tahoma';
end;

with TComboBox.Create(form1) do
begin
Parent := form2;
Name := 'M'+inttostr(NumMeb);
Text := '';
OnEnter:= MyComboBoxEnter;
Style:= csDropDownList;
left:=5;
top:=5;
Width:=100;
Height:=21;
Color:= clWhite;
Font.Color:= clBlack;
Cursor:=crDrag;
Font.Name:='Tahoma';
end;
و ...


برای پاک کردن اونها از کد زیر استفاده میکنم:



for i:=1 to NumMeb do
begin
Objectm:= (form1.FindComponent('M'+inttostr(i)));
if Objectm is TEdit then
begin
TEdit(Objectm).free;
end;
if Objectm is TLabel then
begin
TLabel(Objectm).free;
end;
if Objectm is TComboBox then
begin
TComboBox(Objectm).free;
end;
و...
end;


مشکل اینجاست که اگر اشیا از یه نوع باشه و یا تعدادشون کم باشه ولی از نوعهای مختلفی باشن اونارو پاک میکنه
ولی اگر زیاد باشن و یا بعضی وقتا ایراد میگیره:

لطفا راهنمایی کنید که اینروش من اصلا درست هست یا نه و آیا روشی وجود داره که بشه برای تمام کامپوننت های متنوع این کار رو کرد؟

چرا وقتي تو کد بالا برای پیدا کردن کامپوننت ها به جای فرم 1 از فرم 2 استفاده میکنم (مثل کد زیر) کاری نمیکنه؟ در حالی که فرم 2 رو با دستور Create ایجاد نمیکنم و از اول موجود هست


Objectm:= (form2.FindComponent('M'+inttostr(i)));


ممنون

Felony
شنبه 28 مرداد 1391, 08:19 صبح
شما چی کار داری که کامپوننت مورد نظر از چه کلاسی هست و چه نیازی به Typecast کردن داشتی ؟ اگر میخوای آزادش کنی خوب آزادش کن بره :

Form1.FindComponent('M'+inttostr(i)).Free);