عویض عملکرد کلیدهای Left و Right (حرکت Cursor یا همون مکان نما)
سلام دوستان
همه ی دوستان میدونند که بعداز RightToLeft کردن Formها و یا کنترل ها .. کلیدهای {LEFT / RIGHT} .. برعکس عمل میکنند .. یعنی با زدن کلید {LEFT} مکان نما به راست .. وبا زدن کلید {RIGHT} مکان نما به چپ حرکت میکنه
نقل قول: عویض عملکرد کلیدهای Left و Right (حرکت Cursor یا همون مکان نما)
خوب میتونی وقتی کلید چپ رو زد کلید سمت راستو صدا کنی و برعکس
نقل قول: عویض عملکرد کلیدهای Left و Right (حرکت Cursor یا همون مکان نما)
نقل قول:
نوشته شده توسط
amir200h
خوب میتونی وقتی کلید چپ رو زد کلید سمت راستو صدا کنی و برعکس
چطوری؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟
نقل قول: عویض عملکرد کلیدهای Left و Right (حرکت Cursor یا همون مکان نما)
تو رویداد KeyPress کنترلتون اینو بنویس
if (e.KeyChar == (char)Keys.Left)
{
e.Handled = true;
SendKeys.Send("{Right}");
}
نقل قول: عویض عملکرد کلیدهای Left و Right (حرکت Cursor یا همون مکان نما)
نقل قول:
نوشته شده توسط
amir200h
تو رویداد KeyPress کنترلتون اینو بنویس
if (e.KeyChar == (char)Keys.Left)
{
e.Handled = true;
SendKeys.Send("{Right}");
}
کار نمیکنه اصلا وقتی کلید left و یا right میزنیم بدون اجرای دستورات داخل KeyPress ، بCursor جا به جا میشه
نقل قول: عویض عملکرد کلیدهای Left و Right (حرکت Cursor یا همون مکان نما)
نقل قول: عویض عملکرد کلیدهای Left و Right (حرکت Cursor یا همون مکان نما)
اینجا اقای the king پاسخ دادن ولی من تو vb هم تست کردم نشد
نقل قول: عویض عملکرد کلیدهای Left و Right (حرکت Cursor یا همون مکان نما)
بزارید تو رویداد KeyDown
به این صورت
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;
}
}
اون متغییر فلگ رو باید عمومی تعریف کنید
البته به یاد داشته باشید که کار اصولی نمی تونه باشه
ضمنا یه چک هم بکنید که اگه RTL بود این عمل انجام بشه
نقل قول: عویض عملکرد کلیدهای Left و Right (حرکت Cursor یا همون مکان نما)
اقای the king گفتند که این روش اصولی نیست
لطفا یه نفر روشی را که اقای the king گفتند را با سی شارپ توضیح بدن
نقل قول: عویض عملکرد کلیدهای Left و Right (حرکت Cursor یا همون مکان نما)
نقل قول:
نوشته شده توسط
negar.rafie
اقای the king گفتند که این روش اصولی نیست
لطفا یه نفر روشی را که اقای the king گفتند را با سی شارپ توضیح بدن
اینم کد ایشون در سی شارپ
ولی برا خودمم کار نکرد
protected override bool ProcessKeyMessage(ref Message m)
{
if (RightToLeft != RightToLeft.Yes) return base.ProcessKeyMessage(ref m);
switch ((Keys)m.WParam)
{
case Keys.Left:
m.WParam = (IntPtr)Keys.Right;
break;
case Keys.Right:
m.WParam = (IntPtr)Keys.Left;
break;
}
return base.ProcessKeyMessage(ref m);
}
فکر کنم یه تغییر کوچولو لازم باشه
نقل قول: عویض عملکرد کلیدهای Left و Right (حرکت Cursor یا همون مکان نما)
نقل قول:
نوشته شده توسط
hojjatshariffam
فکر کنم یه تغییر کوچولو لازم باشه
این تغییر کوچولو این بود
یه کلاس بسازید که از تکست باکس ارث ببره
و کد رو تو اون بنویسید .
internal class Class3 : TextBox
{
protected override bool ProcessKeyMessage(ref Message m)
{
if (RightToLeft != RightToLeft.Yes) return base.ProcessKeyMessage(ref m);
switch ((Keys)m.WParam)
{
case Keys.Left:
m.WParam = (IntPtr)Keys.Right;
m.LParam = (IntPtr)Keys.Right;
break;
case Keys.Right:
m.WParam = (IntPtr)Keys.Left;
break;
}
return base.ProcessKeyMessage(ref m);
}
}
تو هر فرمی که خواستین اونو از تولباکس بندازین توش تا این کارو براتون بکنه
نقل قول: عویض عملکرد کلیدهای Left و Right (حرکت Cursor یا همون مکان نما)
نقل قول:
نوشته شده توسط
negar.rafie
اقای the king گفتند که این روش اصولی نیست
لطفا یه نفر روشی را که اقای the king گفتند را با سی شارپ توضیح بدن
یعنی به دردتون نخورد؟ یا نمی تونین ازش استفاده کنید؟
اگه متوجه نشدین بگین تا بیشتر توضیح بدم
نقل قول: عویض عملکرد کلیدهای Left و Right (حرکت Cursor یا همون مکان نما)
باسلام.
بهترین راه این است که به محض دریافت پیغام کیبورد توسط فرم، و قبل از اینکه این پیغام توسط فرم پردازش شده و رویدادهای متناظر فایر شوند، کلیدهای چپ و راست با یکدیگر جا به جا شوند.
برای این کار می توان متود wndproc مربوط به فرم را بازنویسی کرد و قبل از اینکه پیغام به کلاس فرم پاس داده شود باید مقدار WParam چک شود. در صورتی که این مقدار برابر با کلید چپ بود آن را به Keys.Right تغییر داد و بر عکس.
در نمونه کد زیر این عمل انجام شده، البته فقط در مورد رویداد KeyDown. بقیه رویدادهای کیبورد هم به همین ترتیب خواهد بود:
//in the name of god
//صل الله علی محمد و آله
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
const Int32 WM_KEYDOWN = 0x0100;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_KEYDOWN)
{
if(((Keys)m.WParam)==Keys.Right)
m.WParam=(IntPtr)Keys.Left;
else if (((Keys)m.WParam)==Keys.Left)
m.WParam=(IntPtr)Keys.Right;
}
base.WndProc(ref m);
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if((e.KeyCode==Keys.Left )||(e.KeyCode==Keys.Right))
MessageBox.Show(e.KeyCode.ToString());
}
}
}