PDA

View Full Version : Reset کردن فرمهای باز شده



master3d
سه شنبه 08 خرداد 1386, 20:53 عصر
سلام
یه فرم دارم که شامل چندتا Combobox و DBEdit هست . ابتدا فرم رو با دستور Form1.show توسط یه Button باز میکنم و بعد مقادیری به عناصر موجود در فرم میدم . بعد از اون فرم رو با دستور Form1.close میبندم ولی وقتی دوباره فرم رو باز میکنم مقادیر قبلی در داخل عناصر باقی مانده . چه طور میشه فرم رو کامل ریست کرد طوری که اگه دوباره اون رو باز کنیم مثل بار اول همه چیز اون کامل خالی باشه.
ممنون

Mahyaa
سه شنبه 08 خرداد 1386, 21:20 عصر
تا وقتی فرم Free نشده ، مقادیر قبلی رو نگه میداره . شما اگر میخواهید هر بار که فرم رو باز میکنید ، اجزای اون حالت پیشفرض (همون حالتی که شما در زمان طراحی فرم تنطیم کردید ) داشته باشند باید فرم رو بصورت دینامیک Create کنید و هنگام بستن فرم هم اون رو آزاد کنید .

master3d
چهارشنبه 09 خرداد 1386, 20:30 عصر
سلام
دینامیک یعنی چطوری؟
برای آزاد کردن اون از Free باید استفاده کنم؟

Mahyaa
چهارشنبه 09 خرداد 1386, 22:28 عصر
دینامیک یعنی در زمان اجرا ، Create کنی و بعد از اتمام کار با اون فرم آزادش کنی .
بطور معمول برای فرمهای غیر MDI ، به دو شکل عمل میشه :

شکل اول استفاده از Modal Form هستش که فرم بعد از بسته شدن مقداری را به عنوان Modal Result بر میگردونه . کد ساختن و آزاد کردن اون یه چیزی شبیه به این میشه :


Form1 := TForm1.Create(Application);
try
Form1.ShowModal;
finally
Form1.Free;
end;شکل دوم Modal Less (امیدوارم درست نوشته باشم) هست که برای ساختن فرم و نمایش اون میتونیم به این شکل بنویسیم :


Form1 := TForm1.Create(Application);
Form1.Show;وبرای آزاد کردن فرم هم در رویداد OnClose فرم مینویسیم :


Action := caFree;و برای اینکه مطمئن بشیم که مقدار فرم هم Nil شده (شاید برای مرتبه بعدی بخواهیم چک کنیم که اگر Nil هست Create کنه) این خط رو هم میتونیم اضافه کنیم :


Form1 := nil;البته با همون خط اول فرم آزاد میشه و Destructor اون اجرا میشه .

برای فرم های MDI هم فرمها به شکل Modalless نمایش داده میشن ولی روشش یک کمی فرق داره که قبلا هم زیاد در موردش صحبت شده .

در ضمن برای آزاد کردن فرم از متد Release هم میتونی استفاده کنی . تفاوتش رو هم با Free میتونی توی Help دلفی ببینی .