Page 1 of 1

Как программно редактировать яч

Posted: Tue Jun 01, 2010 2:36 pm
by martynov77
Здравствуйте!

Не смог разобраться, как программно перейти в режим редактирования ячейки wxGrid'а, может подскадете?

Posted: Tue Jun 01, 2010 4:07 pm
by T-Rex
Ммм.. документации под рукой нету, но если прям перейти, то ну навскидку вроде было АПИ для получения координат ячейки и потом послать маусевент с даблкликом или с кликом. А так - смотреть сорцы грида и в них - как происходит отображение целл едитора. Ну и сделать аналогично.

Re: Как программно редактировать

Posted: Tue Jun 01, 2010 4:47 pm
by tan
Привет!
martynov77 wrote: Не смог разобраться, как программно перейти в режим редактирования ячейки wxGrid'а, может подскадете?
Ну, например, так:

Code: Select all

grid->SetGridCursor(row, col);
grid->EnableCellEditControl();

Posted: Wed Jun 02, 2010 10:22 am
by martynov77

Code: Select all

void OnKeyDown(wxKeyEvent& event)
{
...
                     SetGridCursor( (int)(newCoverageIdx+1), 0 );
                     SetFocus();
                     ShowCellEditControl();
                     //wxGridCellEditor *pCellEditor = GetCellEditor((int)(newCoverageIdx+1), 0);
                     //if (pCellEditor) pCellEditor->BeginEdit( (int)(newCoverageIdx+1), 0, this );
...
Не работает. курсор на ячейку устанавливается, но в режим редактирования не входит.
Если использовать закоментированное, то валится с переполнением стека.

Posted: Wed Jun 02, 2010 10:45 am
by tan
Ну, если ты юзаешь это из низкоуровневого хандлера самого грида, то тут всякие пересечения могут быть :)
Из внешнего хандлера мой код точно работает. А так надо разбираться, что именно происходит, в каком состоянии сам грид в этот момент пребывает, отрабатывает ли дефолтный хандлер (Skip()) и т.д.
BTW, OnKeyDown() какого класса метод?

Posted: Wed Jun 02, 2010 12:47 pm
by martynov77
Класс-наследник wxGrid'а.
По нажатию DEL хочу удалять строчку под курсором (работает), по нажатию INS хочу добавлять строчку и сразу переходить к редактированию ее содержимого.
По нажатию прочих клавиш делаю event.Skip().

Posted: Wed Jun 02, 2010 1:14 pm
by martynov77
Заменил ShowCellEditControl на EnableCellEditControl - заработало.
Всем спасибо за помощь.

Posted: Wed Jun 02, 2010 2:54 pm
by tan
martynov77 wrote:Заменил ShowCellEditControl на EnableCellEditControl - заработало.
Не понял, я ж так в своем посте и писал EnableCellEditControl() ?

А спасибо не булькает :)

Posted: Wed Jun 02, 2010 4:13 pm
by T-Rex
А спасибо не булькает
С каждым днем находятся все новые и новые способы монетизировать свои знания wxWidgets ;)