PDA

View Full Version : سوال: حرکت دادن شی روی فرم بوسیله کلیدهای جهتی



system32
پنج شنبه 04 تیر 1388, 19:47 عصر
:چشمک:سلام خدمت تمام سی شارپ کاران:

دوستان چطوری می تونم یه کنترل مثل باتن رو بوسیله کلیدهای جهتی روی فرم حرکت بدم.

Mohsen229266
پنج شنبه 04 تیر 1388, 22:52 عصر
تو سایت در مورد KeyPress جستجو کن پیدا میکنی

Reza_Yarahmadi
پنج شنبه 04 تیر 1388, 23:12 عصر
برای باتن فکر نمیکنم بشه با کلیدهای جهت ها جابجاش کرد چون معمولا جهت ها واسه جابجا کردی کرسر استفاده میشه (در باتن). یه نمونه کد برای تکست باکس میذارم امیدوارم به دردت بخوره!


private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyValue)
{
case 37: textBox1.Left--;
break;
case 38: textBox1.Top--;
break;
case 39: textBox1.Left++;
break;
case 40: textBox1.Top++;
break;
}
}

system32
جمعه 05 تیر 1388, 00:44 صبح
ممنون از جواب دوستمون. ولی ای کاش می شد این کار رو برای دیگر کنترل ها نیز انجام داد. مثلا باتن. اگه من برای باتن این کارو بکنم فقط فوکوسش تغییر می کنه نه موقعیتش. آیا راه حلی وجود داره؟:چشمک:

asefy2008
جمعه 05 تیر 1388, 01:11 صبح
سلام این جا (http://rapidshare.com/files/225821659/MoveControls.zip.html) یه مثال هست اما با کلیدهای جهتی نیست با کرسر هست امیدوارم بدردت بخوره.
موفق باشید

alirezavafi
جمعه 05 تیر 1388, 01:20 صبح
می تونی مشابه کد بالا رو تو keypress فرمت بنویسی منتهی باید حتماً keypreview رو برای فرمت true کنی

system32
جمعه 05 تیر 1388, 08:06 صبح
کاملا درسته. از همگی ممنون.

من دارم یه بازی مارپیچ می سازم. حالا یه سوال دیگه: چطوری می توانم کاری کنم که اگر شی به کناره های خط برخورد کرد از خط عبور نکنه.

Mahdi.Kiani
جمعه 05 تیر 1388, 12:57 عصر
سلام
می توانید محتصات کناره های خط را با محتصات کناره های شی مورد نظر مقایسه کنید و در صورت تداخل از ادامه حرکت آن جلوگیری کنید.
موفق باشید.

system32
جمعه 05 تیر 1388, 15:05 عصر
ممنون از شما. ولی اگه لطف کنید و یکمی از کد مربوطه را برام بزارید قول می دم بقیش رو خودم انجام بدم.

vandermond
جمعه 05 تیر 1388, 16:06 عصر
اين كدي هستش كه از راست و چپ كنترل ميكنه. اينجا نسبت به فرم در نظر گرفته شده. يعني از راست و چپ فرم بيرون نميره.حالا اگه شما فرضا ميخوايد از يك خط مايل اون طرف تر نره، باز با همين روش ها و با توجه به اين اطلاعاتي كه داري (فاصله باتن از چپ،پهناي باتن ، فاصله باتن از بالا ، ارتفاع باتن ) و اطلاعات خطي كه داري ميتوني مقايسه كني.:

if (btnRobot.Left <= this.Left/*Line1.left*/)
btnRobot.Left = this.Left;
if (btnRobot.Left + btnRobot.Width >= this.Width/*Line2.Width*/)
btnRobot.Left = this.Width - btnRobot.Width;

Mohsen229266
جمعه 05 تیر 1388, 18:15 عصر
سلام
این کدو ببین یک button رو داخل Panel محدود میکنه


private void button1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
int Step = 2;
if (e.KeyValue == 39)
{
if (button1.Left + button1.Width < panel1.Width)
button1.Left += Step;
}
else if (e.KeyValue == 37)
{
if (button1.Left > 0)
button1.Left -= Step;
}
else if (e.KeyValue == 38)
{
if (button1.Top > 0)
button1.Top -= Step;
}
else if (e.KeyValue == 40)
{
if (button1.Top + (button1.Height) < panel1.Height)
button1.Top += Step;
}
}