Справка с событиями WPF TextCompositionManager

Повторное использование программного обеспечения является наиболее важным способом оптимизации разработки программного обеспечения

Каким-то образом повторное использование программного обеспечения кажется популярным в течение некоторого времени, но потерял свое очарование, когда многие компании узнали, что написание презентаций Powerpoint с повторными лозунгами на самом деле не помогает. Они рассуждали, что повторное использование программного обеспечения просто «недостаточно хорошо» и не может оправдать их мечты. Таким образом, кажется, что он больше не в моде - его заменило множество новичков в управлении проектами (например, Agile).

Дело в том, что любой действительно хороший разработчик сам выполняет какое-то повторное использование программного обеспечения. Я бы сказал . Любой разработчик, не занимающийся повторным использованием программного обеспечения, является плохим разработчиком!

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

Я привел очень старую статью о повторном использовании программного обеспечения (см. Заголовок). Первоначально он был написан на немецком языке и впоследствии переведен - так что извините, пожалуйста, когда это не очень хорошее письмо.

8
задан Brock Adams 19 December 2012 в 22:06
поделиться

1 ответ

Я сам не пробовал, но видел пример, в котором они настраивали Доступные значения для получения из запроса, а затем использовали выражение для определения запроса. Выражение включало значение первого параметра.

Вероятно, также применимо к Alt + numpad plus 2 6 3 B (для U + 263B), если у вас есть параметр реестра , чтобы включить его ; Я этого не подтверждал. (Я установил параметр реестра, но он не дал немедленного эффекта; вероятно, потребуется перезагрузка.)
  • Мертвые ключи: Я понимаю, что на многоязычных клавиатурах есть дополнительные вещи, называемые «мертвыми клавишами», которые изменяют следующее нажатие клавиш. Например, вы можете нажать мертвую клавишу «умляут», за которой следует «о», что означает «напечатать» ö (о с умлаутом). (Я могу ошибиться в деталях. Я всегда использовал клавиатуру en-US и не знаю, что нужно для использования мертвых клавиш.) Я подозреваю, что они будут вести себя аналогично десятичным кодам клавиш; см. ниже.
  • IME: Идеографические языки используют нечто, называемое «Редактором метода ввода». Я знаю об этом даже меньше, чем о мертвых клавишах, и я не знаю, запускают ли они эти события или нет.
  • Обратите внимание, что клавиши-модификаторы, такие как Shift и Ctrl, не запускают эти события напрямую (в отличие от KeyDown, где вы видите Нажатие Shift, затем нажатие 5 и т. Д.). Например, Shift + 5 для получения «%» генерирует только одну последовательность событий (т.е. один TextInputStart и один TextInput), при этом оба получают строку «%».


    TextInputStart запускается всякий раз, когда вы начинаете ввод символа или кода символа. Он запускается, когда вы нажимаете стандартную клавишу, клавишу управления или первую цифру десятичного кода клавиши. Когда это срабатывает, система иногда, но не всегда, уже знает, какую клавишу вы нажимаете (как в случае стандартных клавиш и клавиш управления). Если он знает, он сообщит вам в TextCompositionEventArgs; если он не знает, TextCompositionEventArgs пуст и ничего вам не сообщает.

    TextInputUpdate запускается, когда вы вводите вторую и последующие цифры кода десятичной клавиши. Я еще не видел ничего, кроме пустого TextCompositionEventArgs для этого события (хотя возможно, что это изменяется с мертвыми ключами или IME).

    TextInput запускается, когда вы закончите вводить ключ, и система знает, что убедитесь, какой ключ вы ввели, поэтому он всегда имеет полезную информацию в TextCompositionEventArgs. Это событие означает, что персонаж фактически "набирается" сейчас (то есть соответствует тому моменту, когда символ появится, если вы вводите текст в TextBox).


    Итак, вот как последовательности событий работают для разных типов символов:

    Стандартная клавиша: Как только вы нажимаете клавишу, вы сразу получаете TextInputStart, за которым следует TextInput. Оба имеют одинаковое содержимое в своих TextCompositionEventArgs: e.Text и e.TextComposition.Text установлены на нажатую клавишу. (Обратите внимание, что это не всегда печатаемый символ. Если вы нажмете Backspace, он появится в e.Text.) Если клавиша удерживается, вы получите пару событий (TextInputStart / TextInput) для каждого повторения клавиши.

    Клавиша управления: Как только вы нажимаете буквенную клавишу, вы сразу получаете TextInputStart, за которым следует TextInput. Оба имеют одинаковое содержимое в своих TextCompositionEventArgs: e.ControlText и e.TextComposition.ControlText установлены на нажатую клавишу управления. Если буквенная клавиша удерживается нажатой, вы получаете пару событий (TextInputStart / TextInput) для каждого повторения клавиши.

    Код десятичной клавиши: Допустим, вы набираете Alt + numpad 0 2 5 5. Как только вы нажимаете цифровую клавиатуру 0, вы получаете событие TextInputStart, которое не сообщает вам абсолютно ничего полезного. Для каждого нажатия клавиш numpad 2, numpad 5 и numpad 5 вы получаете событие TextInputUpdate, опять же без полезной информации (вы не можете сказать, какие цифры были нажаты до сих пор). Когда вы отпускаете клавишу Alt (которая фактически «печатает» клавишу, код которой вы ввели), вы получаете событие TextInput с ключом, который вы ввели в свойствах e.Text и e.TextComposition.Text. (Это может быть непечатаемый символ, например, если вы ввели Alt + numpad 0 8.) Повторение клавиш невозможно для десятичных кодов клавиш.

    Мертвый ключ: Как я уже упоминал выше, я не знаю как это проверить. Если у кого-то есть ответ, дайте мне знать, и я Я включу его здесь.

    IME: Опять же, я не знаю, как это проверить.


    У меня сложилось впечатление, что в большинстве случаев TextInput - единственное из этих событий, которое имеет смысл использовать (так как два других не всегда вам ничего говорят). Вероятно, поэтому это единственное из трех, которое повторно отображается как стандартное маршрутизируемое (не прикрепленное) событие в UIElement, UIElement3D и ContentElement.

    17
    ответ дан 5 December 2019 в 10:04
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: