[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);
}