PDA

View Full Version : مشكل با خارج كردن mdi فرزند از حافظه !



smsh-smsh
شنبه 18 اردیبهشت 1389, 08:13 صبح
با سلام خدمت اساتيد و دوستان. بنده مشكلي با mdi دارم ،تالار رو زياد جستجو كردم و موضوع هاي مشابه زيادي پيدا كردم ولي جواب سوالمو نگرفتم ! اما با اين حال شايد م همچين موضوعي قبلاً مطرح شده باشه كه در اون صورت منو ببخشيد :)
من يك mdi پدر دارم و يك فرم فرزند كه از قبل طراحيش كردم و كاپوننت هاشو روش قرار دادم و تمام كد هاي مربوط به فرزند رو براش نوشتم. يكي از اين كامپوننت ها PicBox هستش كه قراره با كليك كردن روي دكمه اوپن از فرم پدر و انتخاب عكس از طريق كاربر يك فرم فرزند از نوع فرم فرزندي كه طراحي كردم ايجاد بشه و عكس داخل picbox نمايش داده بشه. و اما مشكلات !
1)وقتي كار كاربر با فرم فرزند تموم ميشه و اون فرم رو ميبنده اون فرم رو چطور ميشه از حافظه خارج كرد، متود dispose رو در رويداد FormClosedاستفاده كردم ولي جواب نداد! و فضا حافظه اختصاص داده شده به فرم فرزند آزاد نشد !
2)چطور ميشه روي تمام فرم هاي فرزندي كه با باز كردن فايل هاي عكس ايجاد ميشن از طريق فرم پدر كنترل كامل داشت. از قبيل اجراي يك رويداد ، اجراي يك تابع يا تغيير يك متغير. بطور مثال كاربر عكسي رو باز مي كنه و اون عكس رو ويرايش ميكنه و فرم فرزند متغيري براي مشخص شدن تغيير در عكس در خودش داره ، حالا كاربر فرم فرزند رو مي بنده و فرم پدر بايد اين متغير رو چك كنه كه اگر تغييري ايجاد شده از كاربر براي ذخيره عكس ويرايش شده سوال كنه. همچنين آيا اين كار رو از فرم فرزند براي فرم پدر مي تونيم انجام بديم ؟
البته من در VB.Net اين كار رو به راحتي و بدون نوشتن تابع يا برنامه اضافه اي انجام ميدم ولي در C#‎‎ اين كار رو نتونستم انجام بدم.
براتون نمونه ساده از برناممو ميزارم و فقط قسمتي از اونجايي كه مشكل دارم رو در اون قرار ميدم
با تشكر

smsh-smsh
جمعه 31 اردیبهشت 1389, 02:33 صبح
بابا جان هرکی دوست دارین یک جواب به این سوالای ما هم بدین !:ناراحت:

اَرژنگ
جمعه 31 اردیبهشت 1389, 04:33 صبح
با سلام خدمت اساتيد و دوستان. بنده مشكلي با mdi دارم ،تالار رو زياد جستجو كردم و موضوع هاي مشابه زيادي پيدا كردم ولي جواب سوالمو نگرفتم ! اما با اين حال شايد م همچين موضوعي قبلاً مطرح شده باشه كه در اون صورت منو ببخشيد :)
من يك mdi پدر دارم و يك فرم فرزند كه از قبل طراحيش كردم و كاپوننت هاشو روش قرار دادم و تمام كد هاي مربوط به فرزند رو براش نوشتم. يكي از اين كامپوننت ها PicBox هستش كه قراره با كليك كردن روي دكمه اوپن از فرم پدر و انتخاب عكس از طريق كاربر يك فرم فرزند از نوع فرم فرزندي كه طراحي كردم ايجاد بشه و عكس داخل picbox نمايش داده بشه. و اما مشكلات !
1)وقتي كار كاربر با فرم فرزند تموم ميشه و اون فرم رو ميبنده اون فرم رو چطور ميشه از حافظه خارج كرد، متود dispose رو در رويداد FormClosedاستفاده كردم ولي جواب نداد! و فضا حافظه اختصاص داده شده به فرم فرزند آزاد نشد !
2)چطور ميشه روي تمام فرم هاي فرزندي كه با باز كردن فايل هاي عكس ايجاد ميشن از طريق فرم پدر كنترل كامل داشت. از قبيل اجراي يك رويداد ، اجراي يك تابع يا تغيير يك متغير. بطور مثال كاربر عكسي رو باز مي كنه و اون عكس رو ويرايش ميكنه و فرم فرزند متغيري براي مشخص شدن تغيير در عكس در خودش داره ، حالا كاربر فرم فرزند رو مي بنده و فرم پدر بايد اين متغير رو چك كنه كه اگر تغييري ايجاد شده از كاربر براي ذخيره عكس ويرايش شده سوال كنه. همچنين آيا اين كار رو از فرم فرزند براي فرم پدر مي تونيم انجام بديم ؟
البته من در VB.Net اين كار رو به راحتي و بدون نوشتن تابع يا برنامه اضافه اي انجام ميدم ولي در C#‎‎‎ اين كار رو نتونستم انجام بدم.
براتون نمونه ساده از برناممو ميزارم و فقط قسمتي از اونجايي كه مشكل دارم رو در اون قرار ميدم
با تشكر

۱. آزاد کردن فضا تا زمانی که احتیاج نباشد اتفاق نمیافته، به جایه اینکه با یک فرم امتحان کنید، مداوم فرمها را بسازید و دیسپز کنید. بعد از چند ساعت میبینید که مقدار حافظه‌ای که استفاده میشه همانقدر مانده.
آزاد کردن حافظه به زور درست نیست، گاربیج کلکتر اتوماتیک مان بیشتر میسر است.

۲. روشهایه درست با استفاده از ایونتها، و اینترفیسها هستند. ولی اگر میگید که در وی‌بی این کار را انجام میدادید سوال این است که چطوری؟

اَرژنگ
جمعه 31 اردیبهشت 1389, 04:44 صبح
بطور مثال كاربر عكسي رو باز مي كنه و اون عكس رو ويرايش ميكنه و فرم فرزند متغيري براي مشخص شدن تغيير در عكس در خودش داره ، حالا كاربر فرم فرزند رو مي بنده و فرم پدر بايد اين متغير رو چك كنه كه اگر تغييري ايجاد شده از كاربر براي ذخيره عكس ويرايش شده سوال كنه.


همچنين آيا اين كار رو از فرم فرزند براي فرم پدر مي تونيم انجام بديم ؟

خیر، همان فرم چک میکنه که تغییر انجام شده و فرم پدر را باخبر میکنه (با استفاده از ایونت).
فرم پدر در ایونت عمل سیو را انجام میده.
با استفاده از دلگتها میوانید انجام دادن کارها را از اینکه کی کار را انجام بده جدا نگهدارید.