PDA

View Full Version : تفاوت متد close با hide



sasan_22
شنبه 08 مهر 1391, 10:38 صبح
سلام
تفاوت این دو در چیست؟

Form1.Close();
Form1.Hide();


ممنون

AmirGhasemi
شنبه 08 مهر 1391, 11:06 صبح
سلام
hide فرم جاري را مخفي مي كند ولي منابع ان در حافظه همچنان باقي است!
اما close! در واقع باز همان فرم را مخفي مي كند ولي با disposeكردن تمامي منابع، باعث از بين رفتن آنها شده و حافظه را از وجود آن شي حالي مي كند!
به عبارت ديگر وقتي شما فرمي را hide مي كندي آن فرم در واقع پراپرتي visible آن false شده وشما دوباره مي توانيد شي مربطو به همان فرم را صدا كنيد و پراپرتي visibleآن را True كنيد!
اما وقتي فرم را closeمي كنيد كل شي مربطو به آن فرم و اشيا محتوي ان را dispose مي كنيد و ديگر چنين شي اي وجود ندارد!

mehrdad1991h
شنبه 08 مهر 1391, 11:10 صبح
خودمونی بخوایم بگیم این میشه که
هاید کنی فقط نمیبینی فرم را ولی فرم داره اجرا میشه و کار خودش را میکنه و هر وقت قابل نمایشش کنی ادامه کارش را انجام میده
ولی close که کنی فرم منابعش میپره و دیگه فعالیتی انجام نمیده یعنی اگه در حال انجام کاری باشه اون کار متوقف میشه ولی در hide اینجوری نیس

Hajivandian
شنبه 08 مهر 1391, 17:56 عصر
اما وقتي فرم را closeمي كنيد كل شي مربطو به آن فرم و اشيا محتوي ان را dispose مي كنيد و ديگر چنين شي اي وجود ندارد!

به نقل از MSDN

The two conditions when a form is not disposed on Close is when (1) it is part of a multiple-document interface (MDI) application, and the form is not visible; and (2) you have displayed the form using ShowDialog. In these cases, you will need to call Dispose manually to mark all of the form's controls for garbage collection.

ترجمه: در دو مورد در هنگام بسته شدن فرم منابع حافظه مربوط به اون آزاد نمیشه:
1- فرم قسمتی از یک برنامه چند سنده باشه و فرم قابل مشاهده نباشه( خودمم دقیقا منظورش رو نفهمیدم!)
2- فرم مربوطه به وسیله متد ShowDialog نمایش داده شده باشه( این رو خودم تست کردم و نتیجه این بود که فرم بعد از فراخوانی متد Close همچنان قابل استفاده بود چون منابعش آزاد نشده بود)
در این موارد شما باید به صورت دستی متد Dispose را فراخوانی کنید.