我以可编辑模式创建了wxGrid。我注册了以下事件处理程序。

class ReadWriteGrid : public wxGrid
{
public:
ReadWriteGrid(wxWindow *parent, wxWindowID ID,
            const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize,
            long style=262144, const wxString &name=wxGridNameStr)
            : wxGrid(parent, ID, pos, size, style, name)
{
    SetEditable();
}


};


  EVT_GRID_CELL_CHANGE(IndexTableFrame :: OnEditField)


现在,当用户更改单元格值时,将调用我的函数,但在完成后。单元格值变回其旧值。

void IndexTableFrame::OnEditField(wxGridEvent& event)
 {
int RowNumber;
int ColNumber;
wxString type;
wxGridCellEditor *m_Editor;
wxString NewValue;
RowNumber = event.GetRow();
ColNumber = event.GetCol();
m_Editor = m_grid->GetDefaultEditorForCell(RowNumber,ColNumber);
NewValue = m_Editor->GetValue();
m_Editor->Destroy();
m_grid->SetCellValue(NewValue,RowNumber,ColNumber);
event.skip();
   }


这是我第一次使用WxWidget。我不确定如何避免该单元格变回其旧值。

最佳答案

在许多应用程序中,必须在用户更改时即时处理单元格值(例如,根据新的单元格值即时更新其他屏幕上的控件;或通过串行端口发送数据)单元更改后立即转移到另一个设备)。

如上所述,要求用户单击单独的“保存按钮”并不是许多用例中用户都可以接受的解决方案。

我可以通过原始张贴者确认观察结果:如果创建wxGrid并附加wxEVT_GRID_CELL_CHANGED,wxEVT_GRID_CELL_CHANGING或wxEVT_GRID_EDITOR_HIDDEN事件,则调用grid-> GetCellValue(row,col);返回旧值。处理程序函数的event参数也不包含新文本。它看起来像wxGrid的“功能”。

10-08 08:11
查看更多