Делает ли .Skip () событие EVT_TEXT что-нибудь? - PullRequest
0 голосов
/ 23 мая 2018

wx обработчики событий , прикрепленные .Bind(...), получают в качестве параметра объект события методом .Skip().Вызов .Skip() позволяет поведению события по умолчанию произойти;присоединение обработчика, который не вызывает .Skip(), подавляет поведение по умолчанию.Например, обработчик EVT_CHAR, который не вызывает .Skip(), подавляет поведение по умолчанию при вводе символа в поле, блокируя тем самым ввод пользователя.

Как насчет EVT_TEXT?Есть ли у него поведение по умолчанию? не выглядит для ввода в поле с помощью обработчика EVT_TEXT , кажется, ведет себя одинаково независимо от того, вызываю я .Skip() или нет.Но есть ли какой-то крайний случай или неочевидный эффект, который зависит от того, назову ли я .Skip(), и который поэтому должен диктовать мой выбор, называть ли это?

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Не вызывая wxEvent::Skip() делает 2 связанные, но разные вещи: он не позволяет обработчику событий по умолчанию в базовом наборе инструментов UI обрабатывать его, а также предотвращает его обработку другими обработчиками того же события в вашем собственном коде.

Первый аспект действительно не важен для командных событий, которые обычно не имеют никаких обработчиков событий по умолчанию на уровне инструментария.Второй, тем не менее, тем не менее, тем более, что командные события по умолчанию всплывают вверх по иерархии окон.

Так что, если вы привязали какой-то обработчик к своему текстовому элементу управления, и у вас также есть обработчик перехвата всех wxEVT_TEXT вНа уровне фрейма вы можете легко увидеть разницу между вызовом Skip() или нет: обработчик фрейма получит событие, только если вы его вызовите.

С практической точки зрения вы обычно делаете not хочет пропустить обработчики командных событий, так как они должны обрабатываться только один раз.Но это не абсолютный запрет, и есть ситуации, когда вы все еще можете это сделать, например, если ваш обработчик событий ничего не сделал с этим конкретным событием.

0 голосов
/ 23 мая 2018

Вообще говоря, вызов Skip () внутри обработчика событий имеет смысл только для обработчиков не-wxCommandEvent.Вы можете просто дать обработчику завершиться, и ваша программа выполнит следующую итерацию события.

Поскольку wxEVT_TEXT является событием wxCommandEvent, вызов Skip () не имеет особого смысла.

Однако не вызывать Skip () дляnon-wxCommandEvent - это плохо, и вы действительно должны знать, что делаете, если пропустите такой вызов.

...