kiani.mehdi
جمعه 21 اردیبهشت 1386, 23:29 عصر
سلام به همگی راستش اول یه عذر خواهی بکنم از اینکه چند وقته مطلب ننوشتم ، ترم آخری ها میدونن چی میگم ، پروژه و هزار دربدری دیگه تقاضا های زیادی در مورد آموزش سی شارپ داشتم ، عده ای آموزش از ابتدا و عده ای هم خواستار آموزش نکته ویا حالا موردی را داشتند سعی می کنم که رضایت هردوگروه را به نحوی برآورده کنم
اما مقاله امروز :
حتما تا بحال به این نکته فکر کردین که چه جوری میشه یک کنترل را در زمان اجرای برنامه با موس جابجا کرد
خوب راه حل های متفاوتی ممکن است وجود داشته باشه که یکی از آنها را من امروز براتون میگم
فرض کنید یک دکمه (button) روی فرم دارید ،که می خواین اونو در زمان اجرای برنامه مثل زمان طراحی به راحتی تکان دهید
برای این عمل بایستی از سه رویداد مربوط به موس برای دکمه کمک بگیرین
ابتدا سه متغیر در کلاس به صورت زیر تعریف کنید
int yPosition;
bool isDraged;
می دونید که چون این متغیر ها یا بهتر بگم فیلد ها (چون به متغیر ها در کلاس فیلد و و به توابع متد میگن) در کلاس تعریف شدند ، پس مقادیر اولیه انها به صورت زیر است
xPosition =yPosition =0;
isDreaged=false;
حال اگه به شکل زیر توجه کنین ، متوجه همه چیز خواهید شد،برای انکه دکمه زا از حالت 1 به حالت 2 تغییر مکان بدین باید اونو به اندازه (پاره خط قرمز رنگ) در راستای محور X ها و به اندازه (پاره خط آبی رنگ ) در راستای محور y ها تغیر مکان دهید.
http://www.geocities.com/mb.kiani/btnMoveable.gif
پس بایستی برای جابجا کردن دکمه در رویداد mouseMove مربوط به دکمه این دو مقدار یعنی طول پاره خط های قرمز و آبی رنگ را بدست اورده و به ترتیب با خواص left و top مربوط به دکمه جمع کنید
برای محاسبه این مقادیر به صورت زیر عمل کنید
ابتدا در رویداد mouseDown محلی را که دکمه کلیک شده است بدست آورده و مختصات x و y را به ترتیب به متغیر های xPosition و yPosition نسبت دهید
در واقع در رویداد mousedown بایستی کدهای زیر را بنویسید
private void btnMoveable_MouseDown(object sender, MouseEventArgs e)
{
this.Cursor = Cursors.SizeAll;
xPosition = e.X;
yPosition = e.Y;
isDraged = true;
}
دوخط اول کدهای فوق مختصات x و y کرسر را در متغیر های xPosition و yPosition ذخیره می کند
کاربرد کد خط سوم را کمی بعد توضیح می دهم
و خط آخر هم که شکل کرسر را به شکل sizeAll در آورده که در اعمال درگ کردن معمولا آن را مشاهده کرده اید
حال در رویداد mouseMove کدهای زیر را بنویسید private void btnMoveable_MouseMove(object sender, MouseEventArgs e)
{
if (isDraged)
{
btnMoveable.Left = btnMoveable.Left + e.X - xPosition;
btnMoveable.Top = btnMoveable.Top + e.Y - yPosition;
}
}
درکدهای بالا مقادیر e.X – xposition و e.Y – yposition به ترتیب طول پاره خط های قرمز رنگ و آبی رنگ هستند
واما کاربرد متغیر isDreaged
حتما حدس زده اید که از این متغیر به چه منظور استفاده شده است ، بله درست حدس زدید، از این متغیر بدین منظور استفاده کردم که وقتی اجازه حرکت دادن دکمه را داریم که دکمه فشرده شده است و نگه داشته است . برای همین امر در رویداد mouseDown که در بالا دیدید مقدار متغیر isdfreaged را true کردم و در رویداد mouseMove چک کردم که اگر متغیر true است ،(یعنی اگر دکمه فشرده شده است ) مختصات جدید دکمه را بدست بیاور.
اخرین عملی که باید انجام دهید ،این است که مشخص کنید که چه زمانی عمل انتقال تمام شده است ،بله در هنگامی که دست خود را از روی موس بر می داریم ، یعنی رویداد mouseup
پس در رویداد mouseUp بایستی مقدار متغیر isDraged را true کنیم
private void btnMoveable_MouseUp(object sender, MouseEventArgs e)
{
isDraged = false;
this.Cursor = Cursors.Default;
}
خط دوم کد برای این است که شکل کرسر را به حالت پیش فرض درآورد
*امیدوارم که توضیحات کانل بوده باشه و متوجه همه چیز شده باشین
* اگر سوالی در مورد این مطلب دارین میتونین بپرسین
* این روش برای تمامی آبجکت هایی که دارای سه رویداد فوق می باشند قابل پیاده سازی است
* همان طور که در اول مطلب توضیح دادم ، به روش های مختلفی می توان این کار را انجام داد ، این یکی از روشهایی بود که من گفتم
* اگر خواستید کد را کامل تر کنید بایستی آن را طوری تغییر دهید که محدوده حرکت دکمه را نیز کنترل کند(این عمل که کار فوق الاده آسانی هم هست به عهده خودتان)
* btnMoveable نام دکمه ایست که روی فرم قرار دارد و قرار است انتقال یابد
سورس کامل و دموی برنامه را هم میتونین از اینجا (http://www.esnips.com/doc/b7db6504-ccc0-4958-9875-7c7d881645c5/runtimeMoveableControls)دانلود کنید
اما مقاله امروز :
حتما تا بحال به این نکته فکر کردین که چه جوری میشه یک کنترل را در زمان اجرای برنامه با موس جابجا کرد
خوب راه حل های متفاوتی ممکن است وجود داشته باشه که یکی از آنها را من امروز براتون میگم
فرض کنید یک دکمه (button) روی فرم دارید ،که می خواین اونو در زمان اجرای برنامه مثل زمان طراحی به راحتی تکان دهید
برای این عمل بایستی از سه رویداد مربوط به موس برای دکمه کمک بگیرین
ابتدا سه متغیر در کلاس به صورت زیر تعریف کنید
int yPosition;
bool isDraged;
می دونید که چون این متغیر ها یا بهتر بگم فیلد ها (چون به متغیر ها در کلاس فیلد و و به توابع متد میگن) در کلاس تعریف شدند ، پس مقادیر اولیه انها به صورت زیر است
xPosition =yPosition =0;
isDreaged=false;
حال اگه به شکل زیر توجه کنین ، متوجه همه چیز خواهید شد،برای انکه دکمه زا از حالت 1 به حالت 2 تغییر مکان بدین باید اونو به اندازه (پاره خط قرمز رنگ) در راستای محور X ها و به اندازه (پاره خط آبی رنگ ) در راستای محور y ها تغیر مکان دهید.
http://www.geocities.com/mb.kiani/btnMoveable.gif
پس بایستی برای جابجا کردن دکمه در رویداد mouseMove مربوط به دکمه این دو مقدار یعنی طول پاره خط های قرمز و آبی رنگ را بدست اورده و به ترتیب با خواص left و top مربوط به دکمه جمع کنید
برای محاسبه این مقادیر به صورت زیر عمل کنید
ابتدا در رویداد mouseDown محلی را که دکمه کلیک شده است بدست آورده و مختصات x و y را به ترتیب به متغیر های xPosition و yPosition نسبت دهید
در واقع در رویداد mousedown بایستی کدهای زیر را بنویسید
private void btnMoveable_MouseDown(object sender, MouseEventArgs e)
{
this.Cursor = Cursors.SizeAll;
xPosition = e.X;
yPosition = e.Y;
isDraged = true;
}
دوخط اول کدهای فوق مختصات x و y کرسر را در متغیر های xPosition و yPosition ذخیره می کند
کاربرد کد خط سوم را کمی بعد توضیح می دهم
و خط آخر هم که شکل کرسر را به شکل sizeAll در آورده که در اعمال درگ کردن معمولا آن را مشاهده کرده اید
حال در رویداد mouseMove کدهای زیر را بنویسید private void btnMoveable_MouseMove(object sender, MouseEventArgs e)
{
if (isDraged)
{
btnMoveable.Left = btnMoveable.Left + e.X - xPosition;
btnMoveable.Top = btnMoveable.Top + e.Y - yPosition;
}
}
درکدهای بالا مقادیر e.X – xposition و e.Y – yposition به ترتیب طول پاره خط های قرمز رنگ و آبی رنگ هستند
واما کاربرد متغیر isDreaged
حتما حدس زده اید که از این متغیر به چه منظور استفاده شده است ، بله درست حدس زدید، از این متغیر بدین منظور استفاده کردم که وقتی اجازه حرکت دادن دکمه را داریم که دکمه فشرده شده است و نگه داشته است . برای همین امر در رویداد mouseDown که در بالا دیدید مقدار متغیر isdfreaged را true کردم و در رویداد mouseMove چک کردم که اگر متغیر true است ،(یعنی اگر دکمه فشرده شده است ) مختصات جدید دکمه را بدست بیاور.
اخرین عملی که باید انجام دهید ،این است که مشخص کنید که چه زمانی عمل انتقال تمام شده است ،بله در هنگامی که دست خود را از روی موس بر می داریم ، یعنی رویداد mouseup
پس در رویداد mouseUp بایستی مقدار متغیر isDraged را true کنیم
private void btnMoveable_MouseUp(object sender, MouseEventArgs e)
{
isDraged = false;
this.Cursor = Cursors.Default;
}
خط دوم کد برای این است که شکل کرسر را به حالت پیش فرض درآورد
*امیدوارم که توضیحات کانل بوده باشه و متوجه همه چیز شده باشین
* اگر سوالی در مورد این مطلب دارین میتونین بپرسین
* این روش برای تمامی آبجکت هایی که دارای سه رویداد فوق می باشند قابل پیاده سازی است
* همان طور که در اول مطلب توضیح دادم ، به روش های مختلفی می توان این کار را انجام داد ، این یکی از روشهایی بود که من گفتم
* اگر خواستید کد را کامل تر کنید بایستی آن را طوری تغییر دهید که محدوده حرکت دکمه را نیز کنترل کند(این عمل که کار فوق الاده آسانی هم هست به عهده خودتان)
* btnMoveable نام دکمه ایست که روی فرم قرار دارد و قرار است انتقال یابد
سورس کامل و دموی برنامه را هم میتونین از اینجا (http://www.esnips.com/doc/b7db6504-ccc0-4958-9875-7c7d881645c5/runtimeMoveableControls)دانلود کنید