PDA

View Full Version : سوال: تعویض عملکرد کلیدهای Left و Right (حرکت Cursor یا همون مکان نما)



gilsoft
جمعه 15 دی 1391, 06:42 صبح
سلام دوستان

همه ی دوستان میدونند که بعداز RightToLeft کردن Formها و یا کنترل ها .. کلیدهای {LEFT / RIGHT} .. برعکس عمل میکنند .. یعنی با زدن کلید {LEFT} مکان نما به راست .. وبا زدن کلید {RIGHT} مکان نما به چپ حرکت میکنه :ناراحت:

حالا من میخوام تو کنترل های (نوشته شده ی خودم) این کلیدها بصورت استاندارد عمل کنند .. با SendKeys.Send که کار میکنم (نمونه کد زیر) کنترل میوفته تو یه Loop و سرآخر هم با Hang یا Error در نرم افزار روبرو میشم :افسرده: :افسرده:

حالا نمیدونم که : آیا راهی هست که این مشکل برطرف بشه ؟ :متفکر:

'Protected Overrides Sub OnKeyDown or OnKeyUp
Select e.KeyCode
Case Keys.Left : SendKeys.Send("{Right}")
Case Keys.Right : SendKeys.Send("{LEFT}")
End Select

SHD.NET
جمعه 15 دی 1391, 13:21 عصر
منم با همین مشکلات موجه بودم . اما نتوسنتم کاری واسش کنم

the king
جمعه 15 دی 1391, 21:44 عصر
از SendKeys به هیچ وجه استفاده نکنید، مگر اینکه هیچ چاره ای نداشته باشید. SendKeys کاری نداره که کدوم برنامه و کدوم کنترل از بافر اطلاعات کلید های فشرده شده رو می خونه،
به همین دلیل اگه Focus در حین کار تغییر کنه، ممکنه کاری انجام بشه که کاربر رو به دردسر بندازه یعنی با جابجایی Focus و انتقال به یک پنجره دیگه ممکنه کار اشتباهی انجام بشه.



Protected Overrides Function ProcessKeyMessage(ByRef m As System.Windows.Forms.Message) As Boolean
If Me.RightToLeft = Windows.Forms.RightToLeft.Yes Then
Select Case m.WParam
Case Keys.Left
m.WParam = Keys.Right
Case Keys.Right
m.WParam = Keys.Left
End Select
End If
Return MyBase.ProcessKeyMessage(m)
End Function

hojjatshariffam
شنبه 12 مرداد 1392, 17:50 عصر
اینو تو سی شارپ امتحان کنید

private bool flag;
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{

if (flag)
{
flag = false; return; }
if (e.KeyCode == Keys.Left)
{
e.Handled = true;
SendKeys.Send("{Right}");
flag = true;
}
else if (e.KeyCode == Keys.Right)
{
e.Handled = true;
SendKeys.Send("{Left}");
flag = true;
}
}

اون متغییر رو باید عمومی تعریف کنید
البته به یاد داشته باشید که کار اصولی نمی تونه باشه