Partager via


Exemple PenInputPanel

Cet exemple s’appuie sur l’exemple de formulaire de revendications automatiques en intégrant l’objet PenInputPanel . L’exemple se trouve dans le répertoire C# PIPanel dans le dossier AutoClaims.

Notes

Cet exemple nécessite que votre système soit équipé d’un stylet. Si vous utilisez uniquement une souris (ou un autre appareil de pointage hid) non humain), le PenInputPanel n’apparaît pas.

 

Pour plus d’informations sur l’exemple de formulaire de revendications automatiques, consultez Exemple de formulaire de revendications automatiques. Pour plus d’informations sur l’objet PenInputPanel , consultez Programmation du panneau d’entrée à l’aide de la classe PenInputPanel.

Dans l’exemple, le formulaire de réclamations automatiques contient cinq champs dans lesquels l’utilisateur est invité à placer des informations relatives à la demande : le numéro de police, le nom de l’assuré, l’année, la marque et le modèle de la voiture. Un objet PenInputPanel est attaché à chaque champ d’entrée pour fournir un moyen simple d’entrer des valeurs avec un stylet.

Il existe deux techniques pour attacher un objet PenInputPanel aux champs d’entrée de votre formulaire. La première technique consiste à affecter une instance distincte de l’objet à chaque champ d’entrée au moment du design. La deuxième consiste à créer une seule instance de l’objet, puis à attacher cet objet instance au moment de l’exécution à un champ lorsqu’il reçoit le focus. Cet exemple illustre les deux techniques.

Il y a des compromis à faire dans le choix de la technique à utiliser. La création d’une instance unique de l’objet pour chaque champ de formulaire nécessite un peu plus de mémoire lorsque le formulaire est chargé. Toutefois, il évite d’avoir à gérer les événements de focus pour les champs afin d’affecter une seule instance au champ actuel au moment de l’exécution.

Étant donné que l’objet PenInputPanel est pris en charge uniquement sur un Tablet PC, l’exemple crée les objets PenInputPanel dans un bloc de gestion des exceptions.

Un objet par champ

L’exemple illustre la première technique (un objet PenInputPanel par champ) en affectant les champs d’entrée pour le numéro de stratégie (inkEdPolicyNumber) et le nom assuré (inkEdName) une instance unique de l’objet PenInputPanel. Un constructeur surchargé pour l’objet PenInputPanel peut prendre le nom du contrôle d’entrée en tant qu’argument, associant ainsi les contrôles. Voici les lignes du gestionnaire d’événements Load du formulaire :

pipPolicyNumber = new PenInputPanel(inkEdPolicyNumber);
pipName = new PenInputPanel(inkEdName);

Un objet par formulaire

La deuxième technique est également illustrée dans l’exemple : une seule instance d’un objet PenInputPanel, pipShared, est partagée entre les champs d’entrée Year, Make et Model. L’objet partagé est créé à l’aide du constructeur par défaut.

pipShared = new PenInputPanel();

L’utilisation de cette technique nécessite que votre formulaire n’ait qu’une seule instance de l’objet PenInputPanel. Cela permet d’économiser de la mémoire, mais vous devez ajouter du code pour gérer l’événement lorsqu’un champ d’entrée reçoit le focus. Lorsqu’un contrôle qui utilise un instance partagé d’un objet PenInputPanel obtient le focus, définissez la propriété AttachedEditControl de l’objet PenInputPanel sur ce contrôle. Le code suivant montre un gestionnaire d’événements pour les événements des Enter champs Year, Make et 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);
}

Veillez à définir toutes les propriétés qui doivent être définies lorsque le focus passe à un nouveau contrôle. Dans les gestionnaires d’événements précédents, par exemple, la propriété Factoid est définie comme il convient.

Considérations relatives à la convivialité

Gardez à l’esprit les considérations suivantes en matière d’utilisation lors de l’utilisation de l’objet PenInputPanel dans votre application.

Positionnement du PenInputPanel

Étant donné que les champs sont disposés verticalement sur le formulaire de cet exemple, l’interface utilisateur PenInputPanel pour chaque contrôle d’entrée est positionnée légèrement à droite du contrôle d’entrée pour faciliter son utilisation. Cela empêche le PenInputPanel de couvrir la zone d’édition suivante, ce qui facilite le ciblage de la zone d’édition suivante.

pipShared.HorizontalOffset = 32;
pipPolicyNumber.HorizontalOffset = 32;
pipName.HorizontalOffset = 32;

Sélection du panneau d’entrée à afficher

Étant donné que les numéros de stratégie sont souvent des combinaisons de chiffres, de lettres et d’autres caractères, ils peuvent être sujets à des erreurs de reconnaissance. Par conséquent, l’exemple définit le panneau par défaut affiché par l’objet PenInputPanel comme clavier lorsqu’il est attaché au champ numéro de stratégie.

pipPolicyNumber.DefaultPanel = PanelType.Keyboard;

Le comportement par défaut de l’objet PenInputPanel consiste à utiliser le panneau sélectionné en dernier par l’utilisateur.

Interface utilisateur de correction de l’infrastructure Text Services

Dans cet exemple, tous les champs d’entrée sont des contrôles InkEdit . Cela est important, car le contrôle InkEdit prend en charge l’infrastructure TSF ( Text Services Framework ) et est donc capable de prendre en charge l’interface utilisateur de correction sur place pour les entrées reçues de l’objet PenInputPanel .

La valeur par défaut pour EnableTsf est TRUE. L’objet PenInputPanel tente alors de démarrer l’infrastructure TSF (Text Services Framework) sur le contrôle attaché. Si elle réussit, l’interface utilisateur de correction s’affiche dans le contrôle et autorise l’accès aux alternatives de reconnaissance. L’appel de cette méthode avec un paramètre FALSE tente d’arrêter TSF sur le contrôle attaché.

Le contrôle InkEdit fournit déjà une interface utilisateur de correction, mais dans l’exemple EnableTsf est utilisé pour permettre au PenInputPanel d’utiliser le contexte de reconnaissance d’insertion TSF plutôt que la fonction SendInput pour envoyer les résultats de reconnaissance de l’écriture manuscrite dans le contrôle. Le résultat est que le texte peut être inséré même si le champ n’a plus le focus.

  pipName.EnableTsf(true);
  pipPolicyNumber.EnableTsf(true);

Fermeture du formulaire

Dans le code généré par windows Form Designer, les contrôles InkEdit et InkPicture sont ajoutés à la liste des composants du formulaire lors de l’initialisation du formulaire. Lorsque le formulaire se ferme, les contrôles InkEdit et InkPicture sont supprimés, ainsi que les autres composants du formulaire, par la méthode Dispose du formulaire. La méthode Dispose du formulaire supprime également les objets Ink créés pour le formulaire.