Page 1 of 1

wxEVT_GRID_SELECT_CELL и Grid Cursor

Posted: Thu Jan 08, 2009 9:16 am
by borr_1
Обрабатываю wxEVT_GRID_SELECT_CELL для wxGrid, что нужно сделать чтобы после выбора ячейки курсор перешел в эту ячейку?

Code: Select all

void SumOnYearView::OnmGridCellSelect(wxGridEvent& event)
{
  curVal = mGrid->GetCellValue(event.GetRow(), event.GetCol());
  //mGrid->SetGridCursor(event.GetRow(), event.GetCol());//Нельзя тогда снова вызывается wxEVT_GRID_SELECT_CELL
  //event.Skip();
}
Курсор остается в ячейке (0,0)

Posted: Thu Jan 08, 2009 10:23 am
by Ranger
А чем так не подходит?

Code: Select all

void SumOnYearView::OnmGridCellSelect(wxGridEvent& event)
{
  curVal = mGrid->GetCellValue(event.GetRow(), event.GetCol());
  event.Skip();
} 

Posted: Thu Jan 08, 2009 11:45 am
by borr_1
А потому что нужно было не ленится и обновиться на 2.8.9 :evil:

Posted: Thu Jan 08, 2009 4:53 pm
by T-Rex
Может есть смысл посмотреть реализацию SetGridCursor и сделать так же но без вызова события? Или отсабкласиться от грида и сделать версию SetGridCursor с необязательным параметром булевым, который отвечает за то, будет ли файриться ивэнт или нет?

Posted: Fri Jan 09, 2009 8:00 am
by borr_1
Рекс, проблема решена.

Я просто сидел на 2.8.6 там сточка event.Skip(); не решала проблему и wxEVT_GRID_SELECT_CELL вызывался снова. Это был баг. Обновился до 2.8.9 теперь Skip эвента в функции, как это показал ранжер решило проблему.

И еще одно Connect надо прописывать так

Code: Select all

Grid->Connect(wxID_ANY, wxEVT_GRID_SELECT_CELL,
(wxObjectEventFunction)&SumOnYearView::OnGridCellSelect, 0, this);
А не так как wxSmith предлагает

Code: Select all

Connect(ID_GRID1, wxEVT_GRID_SELECT_CELL,
(wxObjectEventFunction)&SumOnYearView::OnGridCellSelect);
Вот тогда и получется эта лажа Skip на event не отрабатывает событие не сбрасывается, а повторяется сново - идет зацикливание... версия wxWidgets тут не при чем. Опять я на те же грабли :?

Posted: Fri Jan 09, 2009 10:38 pm
by Ranger
И еще одно Connect надо прописывать так
можно так:

Code: Select all

Connect(ID_GRID1, 
        wxEVT_GRID_SELECT_CELL,
        wxGridEventHandler(SumOnYearView::OnGridCellSelect);