2012-02-21 20 views

答えて

0

wxEVT_GRID_SELECT_CELLイベントをキャプチャします。

選択された行の配列を取得するには、GetSelectedRows()を使用します。

選択される2つ以上の行がある場合 -

  • 使用SelectRow()は配列の最初の行、たとえば、以外のすべての選択を解除します。
0
wx.EVT_MOTION(self.grid.GetGridWindow(), self.OnMouseMotion) 
    wx.EVT_LEFT_DOWN(self.grid.GetGridWindow(), self.OnMouseLeftDown) 
    wx.EVT_KEY_DOWN(self.grid.GetGridWindow(), self.OnKeyPress) 

def OnMouseMotion(self,event): 
    if event.Dragging(): 
     return 
    else: 
     event.Skip() 

def OnMouseLeftDown(self,event): 
    if event.AltDown() or event.ShiftDown() or event.ControlDown(): 
     return 
    else: 
     event.Skip() 

def OnKeyPress(self,event): 
    if event.GetKeyCode() in [wx.WXK_SHIFT,wx.WXK_ALT,wx.WXK_CONTROL,wx.WXK_UP,wx.WXK_DOWN,]: 
     return 
    else: 
     event.Skip() 
0

私はこの質問はかなり古いですが、インターネットでは、この引数にそこにそんなにいないことを見てきました。

インターネットに投稿された解決策の多くは、完了していないか、いくつかの欠点があります。 私の解決方法は次のとおりです。私は、次の方法

void ReportGrid::DisableRangeHandler (wxGridRangeSelectEvent &ev) 
{ 
    if(ev.Selecting() && (ev.GetTopRow() != ev.GetBottomRow())) { 
     ev.StopPropagation(); 
     ev.Veto(); 
    } 
} 

void ReportGrid::DisableRangeSelectCellHandler (wxGridEvent &ev) 
{ 
    SelectRow(ev.GetRow()); 
} 

void ReportGrid::DisableCtrlMaiusHandler (wxGridEvent &ev) 
{ 
    if (ev.ControlDown() || ev.ShiftDown()){ 
     ev.Veto(); 
    } else { 
     ev.Skip(); 
    } 
} 

void ReportGrid::DisableDraggingHandler (wxMouseEvent &ev) 
{ 
    if (ev.Dragging()){ 
     ev.Skip(false); 
    } 
} 

void ReportGrid::SingleSelectionMode(bool enabled) 
{ 
    if (_singleSelection == enabled){ 
     return; 
    } 
    if (enabled){ 
     Bind(wxEVT_GRID_RANGE_SELECT, &ReportGrid::DisableRangeHandler, this); 
     Bind(wxEVT_GRID_SELECT_CELL, &ReportGrid::DisableRangeSelectCellHandler, this); 
     Bind(wxEVT_GRID_CELL_LEFT_CLICK, &ReportGrid::DisableCtrlMaiusHandler, this); 
     GetGridWindow()->Bind(wxEVT_MOTION, &ReportGrid::DisableDraggingHandler, this); 
     _singleSelection = true; 
    } else { 
     Unbind(wxEVT_GRID_RANGE_SELECT, &ReportGrid::DisableRangeHandler, this); 
     Unbind(wxEVT_GRID_SELECT_CELL, &ReportGrid::DisableRangeSelectCellHandler, this); 
     Unbind(wxEVT_GRID_CELL_LEFT_CLICK, &ReportGrid::DisableCtrlMaiusHandler, this); 
     GetGridWindow()->Unbind(wxEVT_MOTION, &ReportGrid::DisableDraggingHandler, this); 
     _singleSelection = false; 
    } 
} 

これは私がwxWidgetsの上の単一の行選択を持つようにしてきた最も近いと、wxGridを継承したクラスをしました。

関連する問題