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

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
martynov77
Experienced Solver
Experienced Solver
Posts: 74
Joined: Wed Apr 28, 2010 9:41 am

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

Post by martynov77 » Tue Jun 01, 2010 2:36 pm

Здравствуйте!

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

User avatar
T-Rex
Moderator
Moderator
Posts: 1198
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

Post by T-Rex » Tue Jun 01, 2010 4:07 pm

Ммм.. документации под рукой нету, но если прям перейти, то ну навскидку вроде было АПИ для получения координат ячейки и потом послать маусевент с даблкликом или с кликом. А так - смотреть сорцы грида и в них - как происходит отображение целл едитора. Ну и сделать аналогично.

tan
Moderator
Moderator
Posts: 1471
Joined: Tue Nov 14, 2006 7:58 am
Location: Saint-Petersburg, Russia

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

Post by tan » Tue Jun 01, 2010 4:47 pm

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

Code: Select all

grid->SetGridCursor(row, col);
grid->EnableCellEditControl();
OS: Windows XP Pro
Compiler: MSVC++ 7.1
wxWidgets: 2.8.10

martynov77
Experienced Solver
Experienced Solver
Posts: 74
Joined: Wed Apr 28, 2010 9:41 am

Post by martynov77 » Wed Jun 02, 2010 10:22 am

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 );
...
Не работает. курсор на ячейку устанавливается, но в режим редактирования не входит.
Если использовать закоментированное, то валится с переполнением стека.

tan
Moderator
Moderator
Posts: 1471
Joined: Tue Nov 14, 2006 7:58 am
Location: Saint-Petersburg, Russia

Post by tan » Wed Jun 02, 2010 10:45 am

Ну, если ты юзаешь это из низкоуровневого хандлера самого грида, то тут всякие пересечения могут быть :)
Из внешнего хандлера мой код точно работает. А так надо разбираться, что именно происходит, в каком состоянии сам грид в этот момент пребывает, отрабатывает ли дефолтный хандлер (Skip()) и т.д.
BTW, OnKeyDown() какого класса метод?
OS: Windows XP Pro
Compiler: MSVC++ 7.1
wxWidgets: 2.8.10

martynov77
Experienced Solver
Experienced Solver
Posts: 74
Joined: Wed Apr 28, 2010 9:41 am

Post by martynov77 » Wed Jun 02, 2010 12:47 pm

Класс-наследник wxGrid'а.
По нажатию DEL хочу удалять строчку под курсором (работает), по нажатию INS хочу добавлять строчку и сразу переходить к редактированию ее содержимого.
По нажатию прочих клавиш делаю event.Skip().

martynov77
Experienced Solver
Experienced Solver
Posts: 74
Joined: Wed Apr 28, 2010 9:41 am

Post by martynov77 » Wed Jun 02, 2010 1:14 pm

Заменил ShowCellEditControl на EnableCellEditControl - заработало.
Всем спасибо за помощь.

tan
Moderator
Moderator
Posts: 1471
Joined: Tue Nov 14, 2006 7:58 am
Location: Saint-Petersburg, Russia

Post by tan » Wed Jun 02, 2010 2:54 pm

martynov77 wrote:Заменил ShowCellEditControl на EnableCellEditControl - заработало.
Не понял, я ж так в своем посте и писал EnableCellEditControl() ?

А спасибо не булькает :)
OS: Windows XP Pro
Compiler: MSVC++ 7.1
wxWidgets: 2.8.10

User avatar
T-Rex
Moderator
Moderator
Posts: 1198
Joined: Sat Oct 23, 2004 9:58 am
Location: Zaporizhzhya, Ukraine
Contact:

Post by T-Rex » Wed Jun 02, 2010 4:13 pm

А спасибо не булькает
С каждым днем находятся все новые и новые способы монетизировать свои знания wxWidgets ;)

Post Reply