我正在通過VS 2008管理C++。我正在創建一個Windows窗體應用程序。該應用程序包含4個標籤。用戶希望能夠簡單地按功能鍵(在這種情況下,F5,F7,F9或F10)。 。 。將標籤頁放在前面。TabPages ::將標籤帶到KeyDown的前端
我知道我必須捕獲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);
您能否詳細說明ProcessCmdKey?我對此並不熟悉。 。 。 – 2010-12-16 15:10:11
發佈更新了示例代碼。 – 2010-12-16 15:22:00