PDA

View Full Version : بستن یک فرم Child !!



Mahmood_M
پنج شنبه 21 تیر 1386, 11:09 صبح
با سلام
من میخوام با کلیک بر روی یکی از منوهام در فرم اصلی که از نوع MDI هست ، یک فرم از نوع Child رو ببندم ...
راستش هرکاری میکنم نمیشه ...
من این فرم رو با استفاده از یک متغیر که به نام این فرم ( TMyChildForm ) نسبت دادم Create می کنم و نمایش میدم ، حالا میخوام که این فرم رو ببندم ولی وقتی دستور Close رو بعد از نام اون فرم می نویسم ، فرم بسته نمیشه !!! ( مشکل از Action در Event مربوط به OnClose نیست ، اون رو برابر با CaFree قرار دادم ) ، دستور Close رو برای متغیر هم مینویسم جواب نمیده ...
من با یک شرط این کار رو میکنم ، یعنی از متغیر X که از نوع Boolean هست ، مقدار True داشت ، فرم بسته بشه و اگه مقدار False داشت ، فرم Child مورد نظر Create و بعد هم نمایش داده بشه ...
وقتی فرم رو Free هم میکنم در هنگام خروج از برنامه یک AV نمایش داده میشه ولی فرم بسته نمیشه !

به هر حال منتظر راهنمایی دوستان هستم ...

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

SYNDROME
پنج شنبه 21 تیر 1386, 13:56 عصر
با سلام
در منوی خود که باید فرم مورد نظر باز شود دستور زیر را بنویس.


Form_Temp := TForm_Temp.Create(Owner);
Form_Temp.Show;

و سپس در Oncloseمربوط به فرم Form_Temp دستور زیر را بنویسید.(دستور فوق را در آخرین خط OnClose بنویسید)


Form_Temp.Free;

موفق باشید

Mahmood_M
پنج شنبه 21 تیر 1386, 14:44 عصر
سلام
ممنون ...

با سلام
در منوی خود که باید فرم مورد نظر باز شود دستور زیر را بنویس.

کد:
Form_Temp := TForm_Temp.Create(Owner);
Form_Temp.Show;و سپس در Oncloseمربوط به فرم Form_Temp دستور زیر را بنویسید.(دستور فوق را در آخرین خط OnClose بنویسید)

کد:
Form_Temp.Free;موفق باشید

مشکل از این قسمت نیست ...

( مشکل از Action در Event مربوط به OnClose نیست ، اون رو برابر با CaFree قرار دادم )
Action که برابر با CaFree باشه ، فرم موقع بستن Free میشه ...

مشکل اینجاست که اصلا فرم بسته نمیشه ... !!

SYNDROME
پنج شنبه 21 تیر 1386, 16:23 عصر
با سلام
البته من یک کلک زدم.
فرم را در حالت معمولی به صورت Normalقرار دادم و بعد از Create فرم آن را Child کردم و سپس Show را اجرا کردم و بقیه ماجرا.
این کار را بکن ببین مشکلت حل می شود.
موفق باشی

Hamid.Kad
شنبه 23 تیر 1386, 08:38 صبح
متد free بعد از انجام یک سری عملیات، متد Destroy رو فراخوانی میکنه.
احتمالاً جایی که فرم شما داره Free میشه یه اشکالی وجود داره که Destroy رو اجرا نمیکنه، مثلاً ممکنه تو یه جای دیگه داره ازش استفاده میشه.
برای اینکه ببینید مشکل از اینه یا نه بجای Free متد destroy رو بذارید ببینید فرمتون بسته میشه

vcldeveloper
یک شنبه 24 تیر 1386, 11:39 صبح
مثلاً ممکنه تو یه جای دیگه داره ازش استفاده میشه.
چی توی یه جای دیگه داره استفاده میشه؟ Destroy؟! این چه ربطی به اجرا نشدن Destroy داره؟!
در ضمن بارها توضیح داده شد که از Destroy نباید بجای Free استفاده کرد.

موفق باشید

Hamid.Kad
یک شنبه 24 تیر 1386, 14:07 عصر
جناب کشاورز منظور بنده اینه که برای اینکه بدونند متد Destroy فراخوانی میشه یا نه ( برای بستن فرم) اون رو مستقیم احضار کنند. چون اگه متد Free به هر اشکالی برخورد کنه دیگه متد Destroy رو فراخوانی نمیکنه. حرف شما کاملاً متینه.متد Free ایمن تر از Destroy است.