Я работаю в Managed C++ через VS 2008. Я создаю приложение для 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}") ;
}
Любые идеи?
BTW, переменная «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? Я не знаком с этим. , , – 2010-12-16 15:10:11