私は VS 2008 経由で Managed C++ で作業しています。Windows フォーム アプリを作成しています。アプリケーションには 4 つのタブが含まれています。ユーザーは、単純にファンクション キー (この場合は F5、F7、F9、または F10) を押すことができるようにしたいと考えています。. . タブページを前面に移動します。
KeyDown イベントをキャプチャする必要があることはわかっています。それはうまくいきます。これは、KeyDown イベント ハンドラにいくつかの MessageBox::Show をダンプしたため、確かに、ファンクション キーが押されたときにメッセージが返されるためです。
ただし、問題/ジレンマは、実際に選択されたタブページになるために押されたファンクションキーに対応する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);