私はVS 2008経由でManaged C++で作業しています。私はWindowsフォームアプリケーションを作成しています。アプリケーションには4つのタブがあります。ユーザはファンクションキー(この場合はF5、F7、F9またはF10)を押すだけでよい。 。 。タブページを前面に表示します。TabPages :: KeyDownで先頭にタブを移動
私はKeyDownイベントをキャプチャする必要があることを知っています。それはうまく動作します。私はいくつかのMessageBox :: Showを私のKeyDownイベントハンドラに投げ込んでしまったので、これを知っています。そして確かに、ファンクションキーが押されたときに私のメッセージを戻しています。
しかし、問題/ジレンマは、実際に選択したタブページになるように、機能キー押下に対応するTabPageを取得できないようです。私が試してみました 。 。 。 「BringToFront」、「Focus」、「Enter」および「Click」を含む。これらのどれも、TabPageを前面に持っていくというトリックをしていないようだ。
ここは私のC++コードです。 。 。
System::Void frmBadgeScan_GeneralKeyDown(System::Object^ sender, System::Windows::Forms::KeyEventArgs^ e)
{
switch (e->KeyCode)
{
case System::Windows::Forms::Keys::F3:
e->Handled = true ;
if (CurrentTab->Name->Equals("tabEmployeeScanOut"))
btnClearOutList_Click (sender, nullptr) ;
else if (CurrentTab->Name->Equals("tabEmployeeScanIn"))
btnClearInList_Click (sender, nullptr) ;
break ;
case System::Windows::Forms::Keys::F5:
e->Handled = true ;
MessageBox::Show("F5") ;
//this->tabEmployeeScanOut->BringToFront() ;
//this->tabEmployeeScanOut->Focus() ;
//tabEmployeeScanOut_Enter (sender, nullptr) ;
break ;
case System::Windows::Forms::Keys::F9:
e->Handled = true ;
MessageBox::Show("F9") ;
//this->tabEmployeeScanIn->BringToFront() ;
//this->tabEmployeeScanIn->Focus() ;
//tabEmployeeScanIn_Enter (sender, nullptr) ;
break ;
}
}
System::Void tabEmployeeScanIn_Enter(System::Object^ sender, System::EventArgs^ e)
{
CurrentTab = this->tabEmployeeScanIn ;
SendKeys::Send("{Tab}") ;
}
System::Void tabEmployeeScanOut_Enter(System::Object^ sender, System::EventArgs^ e)
{
CurrentTab = this->tabEmployeeScanOut ;
SendKeys::Send("{Tab}") ;
}
ところで、変数 "CurrentTab"は次のように定義されます。 。 。
TabPage ^CurrentTab ;
ありがとうございました!
ああ、フォーム上のどのコントロールにフォーカスがあるかにかかわらず、KeyDownイベントが発生するので、フォーム上のすべてのコントロールがKeyDownイベントをキャプチャするように定義されています。 。 。
。 。
this->stsBadgeScan->KeyDown += gcnew System::Windows::Forms::KeyEventHandler(this, &frmBadgeScan::frmBadgeScan_GeneralKeyDown);
this->tabMainMenu->KeyDown += gcnew System::Windows::Forms::KeyEventHandler(this, &frmBadgeScan::frmBadgeScan_GeneralKeyDown);
this->btnClearOutList->KeyDown += gcnew System::Windows::Forms::KeyEventHandler(this, &frmBadgeScan::frmBadgeScan_GeneralKeyDown);
this->lstScanOut->KeyDown += gcnew System::Windows::Forms::KeyEventHandler(this, &frmBadgeScan::frmBadgeScan_GeneralKeyDown);
this->txtEmplNumScanOut->KeyDown += gcnew System::Windows::Forms::KeyEventHandler(this, &frmBadgeScan::frmBadgeScan_GeneralKeyDown);
this->KeyDown += gcnew System::Windows::Forms::KeyEventHandler(this, &frmBadgeScan::frmBadgeScan_GeneralKeyDown);
ProcessCmdKeyについて詳しく説明できますか?私はそれに精通していません。 。 。 –
サンプルコードが更新されました。 –