سلام
روی
datagridview
می خوام هر کلیدی را که فشار می دم اونا با مسیج باکس نمایش بده
از
e.KeyData
استفاده کردم ولی موقعی که صفحه کلید فارسی است حروف انگلیس را نشون می ده
مثلا بجای حرف ب ، اف انگلیسی را نشون می ده
چکار کنم؟
راه حل زیاده یکیشو میگم.
باید وضعیت کیبرد رو پیدا کنی یه دستور شرطی بزار اگر رو en بود کارکتر انگلیسی بگیره و اگر fa بود کارکتر a رو به عنوان ش در نظر بگیره
کد:
C# Signature:
[DllImport("user32.dll")]
static extern IntPtr GetKeyboardLayout(uint idThread);
کد:
///For using "imm32.dll"'s functions.
const int GCL_REVERSECONVERSION = 0x0002;
[DllImport("Imm32.dll")]
public static extern IntPtr ImmGetContext(IntPtr hWnd);
[DllImport("User32.dll")]
public static extern IntPtr GetKeyboardLayout(int idThread);
[DllImport("Imm32.dll")]
public static extern int ImmGetConversionList(
IntPtr hKL,
IntPtr hIMC,
string lpSrc,
IntPtr lpDst,
int dwBufLen,
int uFlag
);
[DllImport("Imm32.dll")]
public static extern bool ImmReleaseContext(IntPtr hWnd,IntPtr hIMC);
[StructLayout(LayoutKind.Sequential)]
public class CANDIDATELIST
{
public int dwSize;
public int dwStyle;
public int dwCount;
public int dwSelection;
public int dwPageStart;
public int dwPageSize;
public int dwOffset;
}
public string[] GetReverseConversion(string AText)
{
string[] strList = null;
if (AText.Length > 0)
{
IntPtr hIMC = ImmGetContext(this.Handle);
IntPtr hKL = GetKeyboardLayout(0);
int dwSize = ImmGetConversionList(hKL,hIMC,AText,IntPtr.Zero,0,GCL_REVERSECONVERSION);
if (dwSize > 0)
{
IntPtr BufList = Marshal.AllocHGlobal(dwSize);
try
{
ImmGetConversionList(hKL,hIMC,AText,BufList,dwSize,GCL_REVERSECONVERSION);
CANDIDATELIST list = new CANDIDATELIST();
Marshal.PtrToStructure(BufList,list);
byte[] buf = new byte[dwSize];
Marshal.Copy(BufList,buf,0,dwSize);
Marshal.FreeHGlobal(BufList);
int os = list.dwOffset;
string str = System.Text.Encoding.Default.GetString(buf,os,buf.Length-os-3);
char[] par = "\0".ToCharArray();
strList = str.Split(par);
}
finally
{
ImmReleaseContext(this.Handle,hIMC);
}
}
}
return strList;
}
///The example of use of the above code
private void button1_Click(object sender, System.EventArgs e)
{
listBox1.Items.Clear();
listBox1.Items.AddRange(GetReverseConversion(textBox1.Text));
}
وضعیتو چک کن میتونی حتی زبان هم کاملا روی فارسی ست کنی در برنامه [/quote]
ممنون از توضیحی که دادید
با این دستور مشکل حل شد
MessageBox.Show(((Char)e.KeyChar).ToString(), "");
خوبه
ولی بهتره وضعیت کیبرد هم چک کنید که روی فارسی هست یا انگلیسی
بدرود