2013-01-02 32 views
0

我想創建wxGrid,其中用戶可以編輯某些單元格,但禁止輸入不正確的值。例如,只能輸入長度爲4的字符串。所以,如果用戶輸入另一個長度的字符串,我想顯示一條錯誤消息並返回到單元格編輯器。怎麼做?如何防止用戶在wxGrid單元格中輸入無效值?

如果我處理一個小區改變事件EVT_GRID_CELL_CHANGE,例如

void Frame::OnGridCellChange(wxGridEvent& event) 
{ 
    int r = event.GetRow(); // get changed cell 
    int c = event.GetCol(); // get changed cell 

    if (Grid->GetCellValue(r, c).length() != 4) 
     {Error E (this); 
      /* Create the Error message */ 
     E.ShowModal(); 
      // The error message shown, uses clicks OK 

     // So, what to do here? 


} 

Grid->ShowCellEditControl();是不是一個解決方案,因爲小區變更不會,如果用戶編輯沒有產生,但只需點擊另一個單元格 - 不正確的值將出現在網格中。

處理EVT_GRID_EDITOR_HIDDEN似乎不適合,因爲它在新值實際保存到單元格之前出現。

回答

0

也許使用類型爲wxEVT_GRID_CELL_CHANGING的事件會適合您嗎?如果由對事件調用GetString()返回的字符串不是四個字符長,那麼你可以否決的情況下,是這樣的:

void Frame::OnGridCellChanging(wxGridEvent& event) 
{ 
    if (event.GetString().length() != 4) 
    { 
     //Veto the event so the change is not stored 
     event.Veto(); 

     Error E (this); 
     E.ShowModal(); 
} 

但這似乎需要一個wxWidgets的2.9.x版本但是。

+0

感謝諮詢,好了,我還沒有準備好使用2.9.x版本還沒有,但無論如何,這將是更好的保護用戶輸入的數據,但禁止應用小區的編輯,而這種方式它似乎像輸入的數據將丟失... – Nick

+1

雖然你有舊的和新的字符串,所以保存數據不應該是一個問題。我懷疑編寫自己的wxGridCellTextEditor派生自wxGridCellTextEditor可能是最簡單的方法,因爲您可以在編輯器關閉之前執行驗證,所以沒有數據丟失,但字符串沒有被寫入。 – SteveL

相關問題