Текстовое поле winforms Ctrl-Backspace для удаления всего слова и пробелов

Я нашел здесь статью:

Текстовое поле Winforms - использование Ctrl-Backspace для удаления всего слова

чтобы удалить все слово в текстовом поле, удерживая ctrl + backspace, но я заметил, что если вы не реализуете такие модификации app.config:

<configuration>
  <appSettings>
    <add key="SendKeys" value="SendInput" />
  </appSettings>
</configuration>

что будет удалено только текущее слово, и процесс возврата будет прерван. Например, если я наберу «Тим Том», а затем воспользуюсь трюком ctrl + backspace, «Tom» будет удален, прервав любую операцию возврата и оставив «Tom».

Если вы действительно воспользуетесь модификацией app.config, «tom» будет успешно удален, и операции возврата будут продолжены, но без продолжения удаления целых слов, как если бы вы просто удерживали кнопку возврата.

Кто-нибудь знает, что вызывает это или как исправить?


person Thick_propheT    schedule 03.07.2012    source источник


Ответы (1)


Ваше приложение выбирает другое поведение отправки эквивалентов нажатия клавиш в приложение.

Историческое объяснение того, почему существуют эти два протокола, объясняется здесь :

Класс SendKeys был обновлен для .NET Framework 3.0, чтобы его можно было использовать в приложениях, работающих в Windows Vista. Повышенная безопасность Windows Vista (известная как Контроль учетных записей или UAC) не позволяет предыдущей реализации работать должным образом. Класс SendKeys подвержен проблемам с синхронизацией, которые некоторым разработчикам приходилось обходить. Обновленная реализация по-прежнему подвержена проблемам с синхронизацией, но работает немного быстрее и может потребовать изменения обходных путей. Класс SendKeys сначала пытается использовать предыдущую реализацию, а если это не удается, использует новую реализацию. В результате класс SendKeys может вести себя по-разному в разных операционных системах. Кроме того, когда класс SendKeys использует новую реализацию, метод SendWait не будет ждать обработки сообщений при их отправке другому процессу.

Упомянутые здесь проблемы синхронизации особенно касаются непрерывного управления приложением персонажами, а не только одним символом за раз. Они включают

  • сложность синхронизации скорости набора текста
  • убедитесь, что правое окно получает ввод, когда приложение открывает диалоги
  • убедиться, что правильное приложение получает ввод, даже когда пользователь вмешивается в кнопки закрытия

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

Определенно рекомендуется установить параметр SendKeys, чтобы указать желаемое поведение. Вы же не хотите, чтобы ваше приложение таинственным образом начало вести себя по-другому только из-за того, что UAC был включен или выключен.

person Jirka Hanika    schedule 03.07.2012