PDA

View Full Version : حرفه ای: Load یک فرم در رویداد لود فرم دیگه



ali.khoban
سه شنبه 06 تیر 1391, 12:01 عصر
سلام دوستان برنامه نویس

دوستان کسی از شما میدونه چطوری میتونم یک فرم با تمام اتفاقات روش رو قبل یک فرم دیگه لود کنم؟
من یه فرم لوگین دارم اما فرم اصلیم آیتمهای زیادی داره و وقت اجرا جایه عکس ها و لیبل های روش پرش پرش میکنه تا کامل لود شه حالا من میخوام وقتی فرم لوگین لود شد آیتم های فرم اصلی هم لود شه تا وقت نمایش صفحش پرش پرش نکنه و کامل و بدون هیچگونه پرشی نمایش داده شه.

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


frmmain frm=new frmmain()
frm.show()

این کد واسط میسازه فرمو لود نمیکنه
یه چیزی میخوام مثه دستور Load تو ویژوال بیسیک که وقتی مینوشتی کل بخش های اون فرم رو لود میکرد و حتی اگه 300تا عکس و لیبلم داشتی بدن هیچ پرش پرش کردنی نشونش میداد.

چون InitializeComponent کازش ساخت واسط کاربریه حتی تو فرم لوگین این رویدادم که مال فرم اصلیه صدا زدم اما بازم فایده نداشت,DubbleBuffer ام درست کردم

نمونشم براتون ضمیمه کردم


http://s3.picofile.com/file/7419559030/Debug.rar.html


لطفا جواب بدین,حتی اگه بلد نیستین(که فکر نکنم) پیشنهاداتتون رو بگید.

مرسی

ali.khoban
سه شنبه 06 تیر 1391, 15:09 عصر
دوستان کسی نمیدونه چیکار کنم که درست شه؟

majidrezaei2007
سه شنبه 06 تیر 1391, 20:39 عصر
من خودم دقیقا سر یک پروژه به این مشکل بر خوردم .
کاری که من کردم این بود که : کل کدهایی که تو فرم لود فرم اصلیت (که گفتی آیتم زیاد داره و زمان اجرا مقداردهی می کنیدشون) رو تو همون فرم ببری توی یک متدی که خودت میسازی و public (مثلا اسمشم میزاری myload)تعریفش می کنی . رویداد form_load اینطوری از کد خالی میشه . حالا وقتی تو فرم لاگین هستی . اونجا بعد از ساخت نمونه از کلاس فرم اصلیت ، قبل از نمایش اون متد رو صدا میزنی . اینطوری مثلا :

mainform frm = new mainform();
frm.myload();

بعد از اینکه کاربر یوزر و پسورد رو زد نهایتا مینویسی :
frm.Show();

حالا بازم خواستی از این سریعتر باشه که تو فرم لاگینت از thread استفاده می کنی .

ali.khoban
پنج شنبه 08 تیر 1391, 02:58 صبح
با سلام مجدد

ممنون اما سوال من جزئی نبود و من تمام کارایی که گفتینو انجام دادم اما اگه فایل پیوستو دانلود کنین و اجراش کنین متوجه میشین منظورم چیه,تو فایل پیوستی که گذاشتم تو فرم لود هیچ کدی نیست (مشکل منم اون نیست) مشکل من بالا اومدن فرم بدون پرش پرش شدن عکسهاست,واقعا تا الان با این مشکل بر خورده کسی از دوستان؟

حالا من بیام از عکس های کم حجم استفاده کنم اگه سفارش دهنده نرم افزارم تغییر پشت زمینه زد و یک عکس مثلا 1024*768 گذاشت زشته فرم پرش پرش کنه تا اون اصطلاحا Paint شه


دوستان کسی بلده چاره چیه؟

ممنونتون میشم

منتظر پاسخ های شما هستم

majidrezaei2007
پنج شنبه 08 تیر 1391, 12:49 عصر
اگه تو فرم لودش کد نداری . پس اون پرش ها مربوط به کارت گرافیک سیستم شماست . اگه پائینه که طبیعیه و اگه بالاست درایورش رو آپدیت کن . من سر همون پروژه ، رو سیستم خودم پرش داشت ، اما رو یک سیستم قوی تر مشکلی نداشت . در هر صورت اگه می خوای که کلا رو هیچ سیستمی پرش نداشته باشه . راهکار استفاده از splash هست . یک فرم لودینگ باید بزاری ، ضمن لود اون فرم رو نمایش و تا وقتی که لود تموم میشه ، اونم کنترل هاش میاد رو صفحه و وفتی لود تموم شد ، فرم لود رو میبندی و اونو نشون میدی . به عبارتی زمانی که فرم لود داره میره ، فرمتو new میکنی و show هم میکنی اما به صورت background . فرم لودت اولیت بیشتر طوری که روی فرم اصلیت بیاد و تا زمان پایان لودینگ نتونه بره روی اون فرم اصلی . وقتی هم تموم شد ، فرمتو visible میکنی

Restlesa
پنج شنبه 08 تیر 1391, 16:54 عصر
راحت ترین راه اینه که فرم اصلی و فرم لاگینت رو باهام لود کنی اما فرم اصلیت hiden یا Visible=False باشه و بعد از گذشت کسری از ثانیه فرم لاگینت رو کلا ببندی و فرم اصلیت رو Show یا Visible=True کنی

daneshjo90
پنج شنبه 08 تیر 1391, 19:49 عصر
سلام
منم با حرف Restlesa موافقم
اول هردو فرم رو لود كن ولي فرم اصليتو مخفي كن تا كامل بشه در اين مدت هم Splash برنامه ات نمايش داده ميشه
اينطوري فك كنم مشكلي نباشه

samadblaj
پنج شنبه 08 تیر 1391, 22:34 عصر
سلام خسته نباشید منم همین مشکل رو دارم ببینید وقتی برای فرمم یه پس زمینه میزارم موقع اجرا یا جابجایی یه پرش هایی میکنه.

دقیقا دوستمون هم اشاره کرد این مشکل رو توی vb6 من نداشتم ولی اینجا...

به اعتقاد من این روشی رو هم که آقای Restlesa گفت ، بجا و منطقی نیست توی یه پروژه بزرگ ازش استفاده کرد.

یعنی راه بهتری نیست؟

majidrezaei2007
جمعه 09 تیر 1391, 15:02 عصر
تا جایی که من میدونم راه همینه فقط . لود فرم اصلی زمان نمایش اسپلش هست . اونم به صورت threah بندی شده