PDA

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



ali_fbi
شنبه 12 فروردین 1391, 21:23 عصر
سلام دوستان

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

switch (e.KeyCode)
{
case Keys.Left:
button1.Left -= 60;
e.Handled = true;
button1.Text = "";
break;
case Keys.Right:
button1.Left += 60;
e.Handled = true;
button1.Text = "";
break;
case Keys.Up:
button1.Top -= 60;
e.Handled = true;
button1.Text = "";
break;
case Keys.Down:
button1.Top += 60;
e.Handled = true;
button1.Text = "";
break;
}



حالا مشکلی که هست بنده قصد دارم وقتی کاربر دستش را روی کلید نگه می داره حرکت به همون جهت ادامه پیدا کنه که کار بر مجبور نباشه مدام دستش را روی کلد حرکت بده و کلید بزنه

ممنون می شوم راهنمایی کنید

باتشکر
دوست دار شما

Hajivandian
شنبه 12 فروردین 1391, 22:05 عصر
سلام
خصوصیت KeyPreview فرمت رو true کن، بعد کدت رو تو رویداد KeyDown فرم بزار. حله!

ali_fbi
شنبه 12 فروردین 1391, 22:19 عصر
من این کار کردم ولی چند تا باتون توی فرم دارم فقی توی بوتون های سویچ می کنه با تون را تکون نمی ده اصلا

این هست کد من حالا

this .KeyPreview = true;
this .KeyUp += new KeyEventHandler(Movebutton);
}


private void Movebutton(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Left:
button1.Left -= 60;
e.Handled = true;
button1.Text = "";
break;
case Keys.Right:
button1.Left += 60;
e.Handled = true;
button1.Text = "";
break;
case Keys.Up:
button1.Top -= 60;
e.Handled = true;
button1.Text = "";
break;
case Keys.Down:
button1.Top += 60;
e.Handled = true;
button1.Text = "";
break;
}
}

omid_csh
شنبه 12 فروردین 1391, 23:30 عصر
سلام
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
switch (keyData)
{
case Keys.Left:
button1.Left -= 60;
button1.Text = "";
break;
case Keys.Right:
button1.Left += 60;
button1.Text = "";
break;
case Keys.Up:
button1.Top -= 60;
button1.Text = "";
break;
case Keys.Down:
button1.Top += 60;
button1.Text = "";
break;
default:
return base.ProcessCmdKey(ref msg, keyData);
}
return true;
}
مرجع
http://stackoverflow.com/questions/9882310/override-processcmdkey-c-sharp
http://stackoverflow.com/questions/5748454/winforms-capture-key-up-before-control
موفق باشی.

Hajivandian
شنبه 12 فروردین 1391, 23:37 عصر
دوست من گفتم کدت رو توی KeyDown بنویس ولی شما توی KeyUp نوشتی!

omid_csh
یک شنبه 13 فروردین 1391, 00:04 صبح
سلام
با اجازه از "Hajivandian"
البته اگه بخوای از رویداد keyDown استفاده کنی این رویداد رو هم باید اضافه کنی، در حالت پیش فرض کلیدهای جهت نما باعث رخداد رویداد مربوط به KeyDown نمیشن.
this.button1.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(bu tton1_PreviewKeyDown);

private void button1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Down:
case Keys.Up:
case Keys.Left:
case Keys.Right:
e.IsInputKey = true;
break;
}
}
مرجع
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.previewkeydown.aspx
موفق باشی