[DllImport("imm32.dll")] static extern uint ImmGetVirtualKey(IntPtr hWnd); /// /// キー押下イベントを発生 /// /// メッセージ /// キーデータ /// 文字がコントロールによって処理された場合は true。それ以外の場合は false protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { try { // 指定ファンクションキー以外のファンクションキーを押下した場合、エラーを出力する if (CheckProcessFunctionKey(keyData)) { if (!string.IsNullOrEmpty(ErrMsgItemId)) { SetMsgBar("", ""); Control[] cs = this.Controls.Find(ErrMsgItemId, true); if (cs.Length > 0) ((LabelTextBox)cs[0]).Text = FormUtils.GetErrMsgFromList(ErrmsgId, Errmsgs); } return true; } uint virtualKey = 0; const int WM_KEYDOWN = 0x100; const int VK_PROCESSKEY = 0xE5; // IME PROCESS key if (msg.Msg == WM_KEYDOWN && (int)msg.WParam == VK_PROCESSKEY) { virtualKey = ImmGetVirtualKey(Handle); } if (keyData == (Keys.Shift | Keys.F9)) { SetMsgBar("", ""); FormManager.BackForm(keyData); return true; } else if (keyData == (Keys.Shift | Keys.F11)) { SetMsgBar("", ""); FormManager.BackForm(keyData); return true; } else if (keyData == (Keys.Shift | Keys.F12)) { SetMsgBar("", ""); FormManager.BackForm(keyData); return true; } else if (keyData == Keys.F9) { // エラー情報をクリアする SetMsgBar("", ""); // 入力項目をクリアする ClearInputValue(); // 初期化処理 STAR_RTN(); return true; } else if (keyData == Keys.Add || keyData == (Keys.Shift | Keys.Add)) { // 次または前のコントロールへ遷移する this.SelectNextControl(this.ActiveControl, ((keyData & Keys.Shift) != Keys.Shift), true, true, true); return true; } else if (virtualKey == (uint)Keys.Add) { // 次または前のコントロールへ遷移する this.SelectNextControl(this.ActiveControl, ((Control.ModifierKeys & Keys.Shift) != Keys.Shift), true, true, true); return true; } } catch (Exception ex) { this.SetMsgBar(ex.Message, SystemContants.MSG_ERROR); } // 他のファンクションキーの処理も追加できます return base.ProcessCmdKey(ref msg, keyData); }