2016-11-27 31 views
0

在wxGrid中鍵入單元格時,箭頭鍵可以在字符之間前後移動。但是,根據插入位置,我想在按下箭頭鍵時將光標移動到下一個單元格。目前,wxGrid被配置爲捕獲Enter鍵,這使得光標向下移動(到下面的單元格)。 我的問題是如何在編輯器仍然顯示時捕獲KeyEvent。如何在顯示wxGrid編輯器時捕獲KeyEvents

我的方法:

void Grid::OnGridCmdEditorShown(wxGridEvent& event) 
{ 
    m_IsEditorShown=true; 
    //Connect(wxEVT_KEY_DOWN,wxKeyEventHandler(Grid::OnKeyDown),NULL, this); //This approach did not help either 
    event.Skip(); 
} 

void Grid::OnKeyDown(wxKeyEvent& event) 
{ 
    if(m_IsEditorShown) wxMessageBox("You are keying"); 

    event.Skip(); 
} 

當編輯器顯示說我鍵入abc對當前單元格,當我按下進入MessageBox中才會出現。如何在編輯器仍然顯示時捕獲KeyEvents,例如,用戶鍵入a到當前單元格並顯示MessageBox。

回答

0

一個辦法是處理程序連接到每個網格編輯它已被創建之後,加入這Grid構造:

Bind(wxEVT_GRID_EDITOR_CREATED, [=](wxGridEditorCreatedEvent& event) { 
     event.GetControl()->Bind(wxEVT_KEY_DOWN, &Grid::OnKeyDown, this); 
    }); 

這將處理最初的按鍵,其結果首先展示了編輯,但是從我所瞭解的情況來看,在這裏並不需要。

+0

工作得很好,謝謝! – macroland

1

您需要使用自定義編輯器(可能僅從標準wxGridCellTextEditor導出)並綁定到在其Create()中創建的編輯控件的wxEVT_CHAR事件。

請注意,如果您想要處理初始按鍵,結果首先顯示編輯器,則需要覆蓋wxGridCellEditor::StartingKey(),因爲此按鍵在顯示編輯控件之前發生。爲我工作

相關問題