حرکت کنترل ها در زمان اجرا در سی شارپ

حرکت کنترل ها در زمان اجرا در سی شارپ
سلام دوستان، با یاد دوست این اولین پستی هستش که تو این سایت می زارم. هدف کلی از این سایت مکانی رایگان برای به اشتراک گذاری دانش و تجربه های کاریمون هستش حتی اگر ابتدایی باشن چون همه چیز را همه گان دانند و انان نیز نزاده اند. خب بریم سر اصل مطلب: هر کنترلی که روی فرم برنامه قرار میگیره یه دونه خاصیت Top داره که فاصله کنترل از  ابتدای شروع فرم که صفر(Zero) است تا درست نقطه قرار گیری کنترل از بالا رو نشون میده   و یه دونه هم Left که اونم همین فاصله رو منتها از سمت چپ نشون میده. شکل زیر رو ببینید.   خب الان میریم سراغ کد نویسی، اولش سه تا متغیر تعریف میکنیم به شکل زیر :

متغیر  XPosition و YPosition برای نگهداری مکان فعلی ماوس است زمانی که با  ماوس رو یه کنترل کلیک میشه.

متغیر CanDrag هم واسه اینه که ایا رو کنترل کلیک شده یا نه، از این متغیر برای تست اینکه ایا میشه الان کنترل رو حرکت داد یا نه استفاده میشه.

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

تو این رویداد فقط مکان فعلی که ماوس تو اونجا کلیک شده رو ذخیره می کنیم. و متغبر CanDrag رو True میکنیم یعنی الان میشه کنترل رو حرکت داد. و در اخر هم شکل کرسر ماوس رو به شکل همون علامت “بعلاوه که چهار تا نوکش فلش دارن ” در میاریم.

بعدش میریم سراغ رویداد MouseMove کنترل انتخابی بیچاره و کدای زیر رو تو اون مینویسیم 

اول با یه دستور if پرچم CanDrag رو چک میکنیم که ایا میشه کنترل رو حرکت داد یا نه، بعدش با دستورات e.X – XPosition و ex – YPosition  اول فاصله نقاط فعلی ماوس با نقاطی که قبلا ماوس تو اونجا کلیک شدن و تو متغیرهای XPosition و YPosition قرار دادیم بدست میاریم و به این فاصله Offset میگیم. و در اخر هم این افست بدست اومده رو به Top و Left کنترلمون اضافه میکنیم.

در مرحله اخر به سراغ رویداد MoseUp کنترل میریم و تو اون شکل کرسر ماوس رو به حالت اول برمی گردونیم. مثل کدای زیر:

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

تو این شکل ما کنترل باتن رو حرکت دادیم اما در زیر کنترل Listbox قرار گرفته برای حل مشکل از دو تابع تعریف شده در اون کنترل استفاده میکنیم که این توابع چینش کنترل رو در محور Z مختصات جلو و عقب میکنه. این توابع عبارتند از:  SendToBack و BringToFront که به ترتیب برای به عقب بردن و جلو اوردن کنترل استفاده میشن.

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

خب امیدوارم که بدردتون بخوره با یه کوچولو خلاقیت میتونید چیزای بزرگتری باهاش بسازید مثلا یه دونه painیا هر چیز دیگری.

دانلــود بـاکـــس

لینک های دانلود در این باکس قرار دارد
  • 42 کیلوبایت
  • سورس ایران
  • پسورد : www.sourceiran.com

دیدگاه کاربران

تعداد دیدگاه های کاربران : ۲ دیدگاه

زهرا حسینی

عالی بود ممنون

پاسخ دهید
۰

حمزه

ممنون خوب بود

پاسخ دهید
۰


Top