تعویض عملکرد کلیدهای Left و Right (حرکت Cursor یا همون مکان نما)
سلام دوستان
همه ی دوستان میدونند که بعداز 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
نقل قول: تعویض عملکرد کلیدهای Left و Right (حرکت Cursor یا همون مکان نما)
منم با همین مشکلات موجه بودم . اما نتوسنتم کاری واسش کنم
نقل قول: تعویض عملکرد کلیدهای Left و Right (حرکت Cursor یا همون مکان نما)
از 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
نقل قول: تعویض عملکرد کلیدهای Left و Right (حرکت Cursor یا همون مکان نما)
اینو تو سی شارپ امتحان کنید
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;
}
}
اون متغییر رو باید عمومی تعریف کنید
البته به یاد داشته باشید که کار اصولی نمی تونه باشه