PDA

View Full Version : حذف کنترل در هنگام اجرا



smt1383
سه شنبه 22 دی 1388, 11:13 صبح
با سلام
من یک فرم دارم که هنگام باز شدن فرم در رویداد show فرم به صورت دینامیک تعدادی کنترل label ساخته و به فرم اضافه می کنم. حال می خواهم اگر این فرم دوباره باز شد ابتدا label هایی که قبلاً ایجاد کرده ام پاک شوند و سپس label های جدید به صورت دینامیک ساخته و اضافه شوند. اما نمی دانم label های قبلی را چگونه و با چه دستوری باید حذف کنم. ممنون می شوم اگر دوستان راهنمایی کنند.

سعید صابری
سه شنبه 22 دی 1388, 11:20 صبح
میتونی لیبل های قبلی مخفی یا حذف کنی.
برای حذف می تونی از کد زیر استفاده کنی


Label1.Destroy ;
یا
Label1.Free;


اگه بخواي همه ليبل ها را حذف كني مي توني از يك حلقه استفاده كني


for I := 0 to Componentcount - 1 do
if (Components[i] is TLabel) then
(Components[i] as TLabel).Destroy;

vcldeveloper
سه شنبه 22 دی 1388, 11:23 صبح
var
MyComponent : TComponent;
begin
MyComponent := MyForm.FindComponent('MyLabelName');
if Assigned(MyComponent) then
MyComponent.Free;
end;

Felony
سه شنبه 22 دی 1388, 12:00 عصر
میتونی لیبل های قبلی مخفی یا حذف کنی.
برای حذف می تونی از کد زیر استفاده کنی


Label1.Destroy ;
یا
Label1.Free;


اگه بخوای همه لیبل ها را حذف کنی می تونی از یک حلقه استفاده کنی


for I := 0 to Componentcount - 1 do
if (Components[i] is TLabel) then
(Components[i] as TLabel).Destroy;

کدی که شما نوشتید اشکال داره ، باید از آخر به اول کامپوننت ها رو حذف کنید .


var
i: Byte;
begin
for I := Componentcount - 1 Downto 0 do
if (Components[i] is TLabel) then
(Components[i] as TLabel).Free;
end;

smt1383
سه شنبه 22 دی 1388, 12:16 عصر
ممنون از دوستان
من نفهمیدم. از اول به آخر حذف کردن با از آخر به اول حذف کردن چه فرقی داره؟

سعید صابری
سه شنبه 22 دی 1388, 12:27 عصر
شما حذف كنيد آخر و اول نداره!

حق با جناب SilverSoft (http://barnamenevis.org/forum/member.php?u=63881) است. من حواسم نبود. بايد از آخر حذف كني

Felony
سه شنبه 22 دی 1388, 12:44 عصر
فرقش این هست که اگر از اول به آخر حذف کنی هر بار ایندکس کنترل ها تغییر کرده و بعد از چند بار چرخش حلقه کنترل هایی با ایندکس حلقه برای حذف پیدا نمیشود و پیغام خطا صادر میشود ولی اگر از آخر به اول حذف کنید ایندکس ها ثابت باقی میماند و مشکلی پیش نمیاد .

vahid64
سه شنبه 22 دی 1388, 13:21 عصر
var
MyComponent : TComponent;
begin
MyComponent := MyForm.FindComponent('MyLabelName');
if Assigned(MyComponent) then
MyComponent.Free;
end;


این کد شما کار همون حلقه رو انجام میده ؟
آیا از نظر سرعت اجرا این کد بهتر هست یا اون حلقه ؟

Felony
سه شنبه 22 دی 1388, 13:32 عصر
این کد شما کار همون حلقه رو انجام میده ؟
آیا از نظر سرعت اجرا این کد بهتر هست یا اون حلقه ؟

خیر این کد یه کنترل با نام مشحص شده رو پیدا میکنه و اگر وجود داشت و آزاد نشده بود آزادش میکنه .