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()を呼び出して返される文字列が4文字でない場合は、次のようにイベントを拒否できます。

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();
}

ただし、これにはwxWidgets2.9.xリリースが必要なようです。

于 2013-01-02T16:15:20.037 に答える