Parsi Coders

نسخه‌ی کامل: نمایش کلید فشرده شده
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام
روی
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(), "");
خوبه
ولی بهتره وضعیت کیبرد هم چک کنید که روی فارسی هست یا انگلیسی
بدرود