Я работаю в Managed C ++ через VS 2008. Я создаю приложение для Windows. Приложение содержит 4 вкладки. Пользователь хочет иметь возможность просто нажать функциональную клавишу (в этом случае F5, F7, F9 или F10). , , вывести вкладку на передний план.
Я знаю, что должен захватить событие 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);