Parsi Coders
نمایش کلید فشرده شده - نسخه قابل چاپ

+- Parsi Coders (http://parsicoders.com)
+-- انجمن: Software Development Programming (http://parsicoders.com/forumdisplay.php?fid=37)
+--- انجمن: C# Programming (http://parsicoders.com/forumdisplay.php?fid=55)
+--- موضوع: نمایش کلید فشرده شده (/showthread.php?tid=2105)



نمایش کلید فشرده شده - analyze - 04-16-2012

سلام
روی
datagridview
می خوام هر کلیدی را که فشار می دم اونا با مسیج باکس نمایش بده
از
e.KeyData
استفاده کردم ولی موقعی که صفحه کلید فارسی است حروف انگلیس را نشون می ده
مثلا بجای حرف ب ، اف انگلیسی را نشون می ده
چکار کنم؟


RE: نمایش کلید فشرده شده - Amin_Mansouri - 04-16-2012

راه حل زیاده یکیشو میگم.
باید وضعیت کیبرد رو پیدا کنی یه دستور شرطی بزار اگر رو 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]


RE: نمایش کلید فشرده شده - analyze - 04-16-2012

ممنون از توضیحی که دادید
با این دستور مشکل حل شد
MessageBox.Show(((Char)e.KeyChar).ToString(), "");


RE: نمایش کلید فشرده شده - Amin_Mansouri - 04-16-2012

خوبه
ولی بهتره وضعیت کیبرد هم چک کنید که روی فارسی هست یا انگلیسی
بدرود