0

我想创建 wxGrid,用户可以在其中编辑一些单元格,但禁止输入不正确的值。例如,只能在此处输入长度为 4 的字符串。因此,如果用户输入另一个长度的字符串,我想显示一条错误消息并返回到单元格编辑器。怎么做?

例如,如果我处理单元格更改事件 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似乎不合适,因为它出现在新值实际保存到单元格之前。

4

2 回答 2

2

您需要使用自己的单元格编辑器专业化。

http://docs.wxwidgets.org/trunk/classwx_grid_cell_editor.html

于 2013-01-02T17:47:42.897 回答
1

也许使用类型的事件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 版本。

于 2013-01-02T16:15:20.037 回答