Пример PenInputPanel
Этот пример основан на примере формы автозаверений путем интеграции объекта PenInputPanel . Пример находится в каталоге PIPanel на C# в папке AutoClaims.
Примечание
Для этого примера требуется, чтобы система была оснащена устройством пера. Если вы используете только мышь (или другое указывающее устройство, отличное от человека), penInputPanel не отображается.
Дополнительные сведения о образце автоматической формы утверждений см. в разделе Пример формы автоматического утверждения. Дополнительные сведения об объекте PenInputPanel см. в статье Программирование панели ввода с помощью класса PenInputPanel.
В образце форма автозаверений содержит пять полей, в которые пользователю предлагается ввести сведения, относящиеся к претензии: номер полиса, застрахованное имя, год, марки и модель автомобиля. Объект PenInputPanel присоединяется к каждому полю ввода, что позволяет легко вводить значения с помощью пера.
Существует два метода присоединения объекта PenInputPanel к полям ввода в форме. Первый способ — назначить отдельный экземпляр объекта каждому полю ввода во время разработки. Второй — создание одного экземпляра объекта, а затем присоединение этого экземпляра объекта во время выполнения к полю при получении фокуса. В этом примере демонстрируются оба метода.
Существуют компромиссы, связанные с решением, какой метод использовать. Для создания уникального экземпляра объекта для каждого поля формы требуется немного больше памяти при загрузке формы. Тем не менее, это избавляет от необходимости обрабатывать события фокуса для полей, чтобы назначить один экземпляр текущему полю во время выполнения.
Так как объект PenInputPanel поддерживается только на планшетном компьютере, образец создает объекты PenInputPanel в блоке обработки исключений.
Один объект на поле
В примере демонстрируется первый метод (по одному объекту PenInputPanel на поле), назначая входные поля для номера политики (inkEdPolicyNumber
) и застрахованного имени (inkEdName
) уникального экземпляра объекта PenInputPanel. Перегруженный конструктор для объекта PenInputPanel может принимать имя входного элемента управления в качестве аргумента, тем самым связывая элементы управления. Это показано в следующих строках из обработчика событий Load формы:
pipPolicyNumber = new PenInputPanel(inkEdPolicyNumber);
pipName = new PenInputPanel(inkEdName);
Один объект на форму
Второй метод также показан в примере: один экземпляр объекта PenInputPanel используется pipShared
совместно между полями ввода Year, Make и Model. Общий объект создается с помощью конструктора по умолчанию.
pipShared = new PenInputPanel();
Для использования этого метода требуется, чтобы в форме был только один экземпляр объекта PenInputPanel . Это экономит память, но необходимо добавить код для обработки события, когда поле ввода получает фокус. Когда элемент управления, использующий общий экземпляр объекта PenInputPanel, получает фокус, задайте для свойства AttachedEditControl объекта PenInputPanel значение этого элемента управления. В следующем коде показан обработчик событий полей Enter
Year, Make и Model.
private void inkEdYear_Enter(object sender, System.EventArgs e)
{
// Attach the shared PenInputPanel to the Year field
pipShared.AttachedEditControl = inkEdYear;
// set the NUMBER factoid to bias recognition for numbers
pipShared.Factoid = "NUMBER";
// Enable correction UI on the inkEdYear field
pipShared.EnableTsf(true);
}
private void inkEdMake_Enter(object sender, System.EventArgs e)
{
// Attach the shared PenInputPanel to the Make field
pipShared.AttachedEditControl = inkEdMake;
// reset the factoid to bias recognition for general text
pipShared.Factoid = "DEFAULT";
// Enable correction UI on the inkEdMake field
pipShared.EnableTsf(true);
}
private void inkEdModel_Enter(object sender, System.EventArgs e)
{
// Attach the shared PenInputPanel to the Model field
pipShared.AttachedEditControl = inkEdModel;
// reset the factoid to bias recognition for general text
pipShared.Factoid = "DEFAULT";
// Enable correction UI on the inkEdModel field
pipShared.EnableTsf(true);
}
Обязательно задайте все свойства, которые необходимо задать при изменении фокуса на новый элемент управления. В предыдущих обработчиках событий, например, свойство Factoid задано соответствующим образом.
Рекомендации по использованию
При использовании объекта PenInputPanel в приложении учитывайте следующие аспекты удобства использования.
Размещение penInputPanel
Так как поля расположены вертикально на форме в этом примере, пользовательский интерфейс PenInputPanel для каждого элемента управления вводом расположен немного справа от элемента управления вводом, чтобы упростить его использование. Это не позволяет PenInputPanel покрывать следующее поле редактирования, что упрощает настройку следующего поля редактирования.
pipShared.HorizontalOffset = 32;
pipPolicyNumber.HorizontalOffset = 32;
pipName.HorizontalOffset = 32;
Выбор панели ввода для отображения
Так как номера политик часто представляют собой комбинации цифр, букв и других символов, они могут быть подвержены ошибкам распознавания. Таким образом, в примере настраивается панель по умолчанию, отображаемая объектом PenInputPanel , как клавиатура при присоединении к полю номера политики.
pipPolicyNumber.DefaultPanel = PanelType.Keyboard;
По умолчанию объект PenInputPanel использует панель, выбранную пользователем последним.
Пользовательский интерфейс коррекции платформы текстовых служб
В этом примере все входные поля являются элементами управления InkEdit . Это важно, так как элемент управления InkEdit имеет встроенную поддержку платформы текстовых служб (TSF) и, таким образом, может поддерживать пользовательский интерфейс исправления на месте для входных данных, полученных от объекта PenInputPanel .
Значение по умолчанию для EnableTsf — TRUE. Это приводит к тому, что объект PenInputPanel пытается запустить платформу текстовых служб (TSF) на присоединенном элементе управления. В случае успешного выполнения в элементе управления появится пользовательский интерфейс коррекции, который разрешает доступ к альтернативным вариантам распознавания. Вызов этого метода с параметром FALSE пытается завершить работу TSF для присоединенного элемента управления.
Элемент управления InkEdit уже обеспечивает исправление пользовательского интерфейса, но в примере EnableTsf используется, чтобы разрешить PenInputPanel использовать контекст распознавателя вставки TSF, а не функцию SendInput для отправки результатов распознавания рукописного текста в элемент управления . В результате текст можно вставить, даже если поле больше не имеет фокуса.
pipName.EnableTsf(true);
pipPolicyNumber.EnableTsf(true);
Закрытие формы
В Designer созданном коде Формы элементы управления InkEdit и InkPicture добавляются в список компонентов формы при инициализации формы. При закрытии формы элементы управления InkEdit и InkPicture удаляются, а также другие компоненты формы методом Dispose формы. Метод Dispose формы также удаляет объекты Ink , созданные для формы.