반응형
#region ImportDLL
[DllImport("Imm32.dll", SetLastError = true)]
public static extern IntPtr ImmGetContext(IntPtr hWnd);
[DllImport("imm32.dll")]
public static extern bool ImmGetConversionStatus(IntPtr himc, ref int lpdw, ref int lpdw2);
[DllImport("imm32.dll")]
public static extern bool ImmGetOpenStatus(IntPtr himc);
private Byte IME_CMODE_HANGEUL = 0x0001;
#endregion


  protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            //ime가 한글일경우 바로 editMode로 들어가도록 한다.  textbox입력 모드로 하기위해서
            int iMode = 0;
            int iSentence = 0;
            IntPtr HIme = ImmGetContext(this.dataGridViewUpload.Handle);
            bool bSuccess = ImmGetConversionStatus(HIme, ref iMode, ref iSentence);

            if (ImmGetOpenStatus(HIme))
            {

                if ((iMode & IME_CMODE_HANGEUL) > 0)
                {


                    if (!((keyData & Keys.Control) == Keys.Control))
                    {

                        switch (keyData)
                        {
                            case Keys.Up:
                            case Keys.Down:
                            case Keys.Left:
                            case Keys.Right:
                                break;
                            default:
                                dataGridViewUpload.BeginEdit(true);
                                break;
                        }

                    }
                }
            }

            if (keyData == Keys.Enter)
            {

                if (this.dataGridViewUpload.CurrentCell != null
                    && this.dataGridViewUpload.CurrentCell.IsInEditMode
                    && !(this.dataGridViewUpload.CurrentCell is DataGridViewCheckBoxCell))
                {
                    MoveNextCell();
                }
            }
            return base.ProcessCmdKey(ref msg, keyData);
        }

+ Recent posts