check home phone-call search send

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

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

private int XPosition;

private int YPosition;

private bool CanDrag = false;

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

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

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

private void btnMoveMe_MouseDown(object sender, MouseEventArgs e(

       }

         XPosition = e.X;

            YPosition = e.Y;

            CanDrag = true;

            btnMoveMe.Cursor = Cursors.SizeAll;

{

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

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

        private void btnMoveMe_MouseMove(object sender, MouseEventArgs e)

        }

            if (CanDrag)

            }

                btnMoveMe.Left += e.X – XPosition;

                btnMoveMe.Top += e.Y – YPosition;

            {

            {

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

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

        private void btnMoveMe_MouseUp(object sender, MouseEventArgs e)

        {

            CanDrag = false;

            btnMoveMe.Cursor = Cursors.Default;

       
            {

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

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

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

 private void btnSendToBack_Click(object sender, EventArgs e)

        {

            btnMoveMe.SendToBack();

        }

        private void btnBringToFront_Click(object sender, EventArgs e)

        {

            btnMoveMe.BringToFront();

     
            {

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

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

لینک های دانلود در این باکس قرار دارد
img

جهت مشاهده لینک های دانلود ابتدا وارد شده یا ثبت نام کنید

Avatar
پشتیبان سورس ایران 2180 مطلب منتشر شده

در مجموعه سورس ایران سعی می کنیم علاوه بر آموزش برنامه نویسی، به مسائل مرتبط و مهارت های نرم بپردازیم تا بعدهای مختلف را پوشش دهیم.

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

تعداد دیدگاه های کاربران : 5 دیدگاه
Avatar
جابر
پاسخ دهید

سپاسگذارم از شما بابت سایت خوبتون

Avatar
حیدر
پاسخ دهید

تشکر …..عالی بود

Avatar
زهرا حسینی
پاسخ دهید

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

Avatar
حمزه
پاسخ دهید

ممنون خوب بود


شما با موفقیت در خبرنامه ما عضو شدید