PDA

View Full Version : چطوری میشه عکس background یک فرم را refresh کرد!



sanaz_k
دوشنبه 26 فروردین 1387, 13:21 عصر
چطوری میشه عکس background یک فرم را refresh کرد!

hassan razavi
دوشنبه 26 فروردین 1387, 13:48 عصر
منظورتون از Refresh چیه ؟ تعویض در بازه زمانی منظورتون هست ؟

sanaz_k
دوشنبه 26 فروردین 1387, 16:13 عصر
من یکسری جابجایی روی فرمم انجام میدم(جابجایی کنترل ها)
حالا وقتی این جابجایی ها متداول میشه background فرمم دچار پرش میشه
(این جابجایی در داخل حلقه صورت میگیره!)
من دنبا همچین چیزی برای background فرم هستم!


pictureBox1.Refresh();

hassan razavi
دوشنبه 26 فروردین 1387, 16:37 عصر
Doevents()

sanaz_k
دوشنبه 26 فروردین 1387, 18:12 عصر
Doevents()

آقای رضوی میشه در این مورد توضیح بدید؟
doevent چه کاری را انجام میده؟ چطوری ازش استفاده کنم؟ متشکر!!

sinpin
دوشنبه 26 فروردین 1387, 18:26 عصر
من یکسری جابجایی روی فرمم انجام میدم(جابجایی کنترل ها)
حالا وقتی این جابجایی ها متداول میشه background فرمم دچار پرش میشه
(این جابجایی در داخل حلقه صورت میگیره!)
من دنبا همچین چیزی برای background فرم هستم!


pictureBox1.Refresh();

refresh کردن خودش باثت پرش بیشتر میشه.
برای حذف پرش ها شما باید double buffering کنید.

sinpin
دوشنبه 26 فروردین 1387, 18:37 عصر
آقای رضوی میشه در این مورد توضیح بدید؟
doevent چه کاری را انجام میده؟ چطوری ازش استفاده کنم؟ متشکر!!
طریقه ی استفاده :

Application.DoEvents();کد بالا با ایجاد یک وقفه، باعث میشه استثنائا تمامی پیامهای ویندوزی منتظر و لیست شده در Message Queue انجام بشه.
مورد کاربرد اون بیشتر در حلقه های طولانی ست برای آنکه UI برنامه اصطلاحا freeze یا Not Respond نشه و بتونه تراکنشهای کاربر رو پاسخ بده. برای مثال اگه درون یک حلقه از DoEvents استفاده نشه مادامیکه حلقه به پایان نرسه تمامی تراکنشها کاربر (مانند حرکت دادن ماوس، کلیک، OnPaint فرم برنامه و ... ) وارد صف (Message Queue) میشوند تا در یک زمان مناسب (پس از اتمام حلقه) فرصتی برای اجرا داشته باشند.
جهت اطلاعات بیشتر کلیک کنید (http://msdn2.microsoft.com/en-us/library/system.windows.forms.application.doevents.aspx)

اما با توجه به موردی که شما خواستید DoEvents کمکی به شما نمیکنه مگر آنکه پرش رو بیشتر کنه ! (به پست قبلی مراجعه نمایید.)

sanaz_k
دوشنبه 26 فروردین 1387, 22:39 عصر
refresh کردن خودش باثت پرش بیشتر میشه.
برای حذف پرش ها شما باید double buffering کنید.

متاسفانه در مورد double buffering مطلبی پیدا نکردم! میشه مقداری توضیح بدبد
(با عرض شرمندگی زیاد):خجالت:

hassan razavi
سه شنبه 27 فروردین 1387, 08:29 صبح
http://www.developerfusion.co.uk/show/4668/
http://www.bobpowell.net/doublebuffer.htm

hdv212
سه شنبه 27 فروردین 1387, 09:44 صبح
در داخل رویداد فرمتون میتونید از این تابع با آرگومان مربوطه استفاده کنید :

this.Invalidate(true);
هرچند که ممکنه Pocess زیادی رو بگیره ولی فکر میکنم مناسب هدف شما باشه، با ارسال مقدار true به عنوان پارامتر، شما مشخص میکنید که عملیات RePaint برای کنترل های موجود بر روی فرم هم اجرا بشه، برای اطلاعات بیشتر از OverLoad های دیگر این متد، به مستندات MSDN مراجعه کنید.