Freigeben über


PenInputPanel-Beispiel

Dieses Beispiel baut auf dem Auto Claims-Formularbeispiel auf, indem das PenInputPanel-Objekt integriert wird. Das Beispiel befindet sich im C#-PIPanel-Verzeichnis im Ordner AutoClaims.

Hinweis

Dieses Beispiel erfordert, dass Ihr System mit einem Stiftgerät ausgestattet ist. Wenn Sie nur eine Maus (oder ein anderes Nicht-Menschliches Interface-Gerät (HID) verwenden, wird das PenInputPanel nicht angezeigt.

 

Weitere Informationen zum Beispiel für das Formular für automatische Ansprüche finden Sie unter Beispiel für Formular für automatische Ansprüche. Weitere Informationen zum PenInputPanel-Objekt finden Sie unter Programmieren des Eingabebereichs mithilfe der PenInputPanel-Klasse.

Im Beispiel enthält das Formular für automatische Ansprüche fünf Felder, in die der Benutzer aufgefordert wird, informationen einzufügen, die für den Anspruch relevant sind: Versicherungsnummer, Versicherungsname, Jahr, Herstellung und Modell des Fahrzeugs. Jedem Eingabefeld wird ein PenInputPanel-Objekt angefügt, um eine einfache Möglichkeit zum Eingeben von Werten mit einem Stift zu bieten.

Es gibt zwei Techniken zum Anfügen eines PenInputPanel-Objekts an die Eingabefelder in Ihrem Formular. Die erste Technik besteht darin, jedem Eingabefeld zur Entwurfszeit eine separate instance des Objekts zuzuweisen. Die zweite besteht darin, eine einzelne instance des Objekts zu erstellen und dieses Objekt dann zur Laufzeit instance an ein Feld anzufügen, wenn es den Fokus empfängt. In diesem Beispiel werden beide Techniken veranschaulicht.

Es gibt Kompromisse bei der Entscheidung, welche Technik verwendet werden soll. Das Erstellen einer eindeutigen instance des Objekts für jedes Formularfeld erfordert etwas mehr Arbeitsspeicher, wenn das Formular geladen wird. Es ersparen sich jedoch die Verarbeitung von Fokusereignissen für die Felder, um dem aktuellen Feld zur Laufzeit ein einzelnes instance zuzuweisen.

Da das PenInputPanel-Objekt nur auf einem Tablet-PC unterstützt wird, werden im Beispiel die PenInputPanel-Objekte in einem Ausnahmebehandlungsblock erstellt.

Ein Objekt pro Feld

Das Beispiel veranschaulicht die erste Technik (ein PenInputPanel-Objekt pro Feld), indem den Eingabefeldern für die Richtliniennummer (inkEdPolicyNumber) und den versicherten Namen (inkEdName) eine eindeutige instance des PenInputPanel-Objekts zugewiesen wird. Ein überladener Konstruktor für das PenInputPanel-Objekt kann den Namen des Eingabesteuerelements als Argument annehmen und so die Steuerelemente zuordnen. Die folgenden Zeilen aus dem Load-Ereignishandler des Formulars zeigen folgendes:

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

Ein Objekt pro Formular

Das zweite Verfahren wird auch im Beispiel gezeigt: Ein einzelner instance eines PenInputPanel-Objekts wird pipSharedzwischen den Eingabefeldern Year, Make und Model gemeinsam genutzt. Das freigegebene Objekt wird mithilfe des Standardkonstruktors erstellt.

pipShared = new PenInputPanel();

Wenn Sie dieses Verfahren verwenden, muss Ihr Formular nur über eine einzelne instance des PenInputPanel-Objekts verfügen. Dies spart Arbeitsspeicher, aber Sie müssen Code hinzufügen, um das Ereignis zu behandeln, wenn ein Eingabefeld den Fokus empfängt. Wenn ein Steuerelement, das eine freigegebene instance eines PenInputPanel-Objekts verwendet, den Fokus erhält, legen Sie die AttachedEditControl-Eigenschaft des PenInputPanel-Objekts auf dieses Steuerelement fest. Der folgende Code zeigt einen Ereignishandler für die Ereignisse der Felder Enter Year, Make und 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);
}

Achten Sie darauf, alle Eigenschaften festzulegen, die festgelegt werden müssen, wenn der Fokus auf ein neues Steuerelement geändert wird. In den vorherigen Ereignishandlern wird beispielsweise die Factoid-Eigenschaft entsprechend festgelegt.

Überlegungen zur Benutzerfreundlichkeit

Beachten Sie die folgenden Überlegungen zur Benutzerfreundlichkeit, wenn Sie das PenInputPanel-Objekt in Ihrer Anwendung verwenden.

Positionieren des PenInputPanel

Da die Felder in diesem Beispiel vertikal auf dem Formular angeordnet sind, wird die PenInputPanel-Benutzeroberfläche für jedes Eingabesteuerelement leicht rechts neben dem Eingabesteuerelement positioniert, um die Verwendung zu vereinfachen. Dadurch wird verhindert, dass penInputPanel das nächste Bearbeitungsfeld verdeckt, was das Ziel für das nächste Bearbeitungsfeld erleichtert.

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

Auswählen des anzuzeigenden Eingabebereichs

Da Richtliniennummern häufig Kombinationen aus Zahlen, Buchstaben und anderen Zeichen sind, können sie anfällig für Erkennungsfehler sein. Daher legt das Beispiel den vom PenInputPanel-Objekt angezeigten Standardbereich auf die Tastatur fest, wenn es an das Feld "Richtliniennummer" angefügt wird.

pipPolicyNumber.DefaultPanel = PanelType.Keyboard;

Das Standardverhalten des PenInputPanel-Objekts besteht darin, den Bereich zu verwenden, den der Benutzer zuletzt ausgewählt hat.

Benutzeroberfläche für die Text Services-Frameworkkorrektur

In diesem Beispiel sind alle Eingabefelder InkEdit-Steuerelemente . Dies ist von Bedeutung, da das InkEdit-Steuerelement über integrierte Unterstützung für das Text Services Framework (TSF) verfügt und somit in der Lage ist, die benutzeroberfläche der direkten Korrektur für Eingaben zu unterstützen, die vom PenInputPanel-Objekt empfangen werden.

Der Standardwert für EnableTsf ist TRUE. Dadurch versucht das PenInputPanel-Objekt , das Text Services Framework (TSF) für das angefügte Steuerelement zu starten. Bei erfolgreicher Ausführung wird die Benutzeroberfläche für die Korrektur im Steuerelement angezeigt, und sie ermöglicht den Zugriff auf alternative Erkennungsfunktionen. Beim Aufrufen dieser Methode mit einem FALSE-Parameter wird versucht, TSF für das angefügte Steuerelement herunterzufahren.

Das InkEdit-Steuerelement bietet bereits eine Korrekturbenutzeroberfläche, aber im Beispiel wird EnableTsf verwendet, um das PenInputPanel zu ermöglichen, den TSF-Einfügeerkennungskontext anstelle der SendInput-Funktion zu verwenden, um die Ergebnisse der Handschrifterkennung an das Steuerelement zu senden. Das Ergebnis ist, dass Text eingefügt werden kann, auch wenn das Feld keinen Fokus mehr hat.

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

Schließen des Formulars

Im generierten Code von Windows Form Designer werden die Steuerelemente InkEdit und InkPicture der Komponentenliste des Formulars hinzugefügt, wenn das Formular initialisiert wird. Wenn das Formular geschlossen wird, werden die Steuerelemente InkEdit und InkPicture sowie die anderen Komponenten des Formulars durch die Dispose-Methode des Formulars verworfen. Die Dispose-Methode des Formulars verfügt auch über die Freihandobjekte , die für das Formular erstellt werden.