Freigeben über


Gescanntes Papierformularbeispiel

In diesem C#-Beispiel wurde ein Papierformular als PNG-Datei (Portable Network Graphics) gescannt und zur Laufzeit als Hintergrundbild für ein InkPicture-Steuerelement angegeben. Im Beispiel wird ein Meldungsfeld zum Anzeigen von Schrifterkennungsergebnissen verwendet.

Das Beispiel enthält eine XML-Datei (Extensible Markup Language), Formdata.xml. Die XML-Datei enthält den Namen der PNG-Datei. Es enthält auch FieldInfo Elemente, die rechteckige Bereiche im Formular definieren, in denen ein Benutzer Freihandzeichnungen eingeben kann. Die Informationen im FieldInfo Element werden im folgenden Beispiel gezeigt:

    <FieldInfo>
        <Name>first name</Name>
        <Left>88</Left>
        <Top>65</Top>
        <Right>332</Right>
        <Bottom>94</Bottom>
    </FieldInfo>

Die Elemente "Left", "Top", "Right" und "Bottom" sind Definitionen von Pixelkoordinaten für jedes Feld.

Im Beispiel wird ein neues DataSet mit den daten initialisiert, die in Formdata.xmlenthalten sind:

    formData = new DataSet("FormData");
    formData.ReadXml("formdata.xml"); 

Das in Formdata.xml angegebene Formularbild wird als Hintergrund des InkPicture-Steuerelements geladen:

    inkPicture1.BackgroundImage = 
        System.Drawing.Image.FromFile(
        (string) formData.Tables["FormData"].Rows[0]["Image"]);

Die Freihanderfassung wird dann für das InkPicture-Steuerelement aktiviert.

    inkPicture1.InkEnabled = true;

Die Anwendung enthält Klickereignishandler für alle Menüs, die am oberen Rand des Formulars angezeigt werden.

Menüelement "Erkennen"

Der Klickereignishandler "Erkennen" deaktiviert die Freihandauflistung für das Steuerelement und sucht nach einer Handschrifterkennung. Wenn keine Erkennung installiert ist, wird ein Dialogfeld angezeigt. Ein Benutzer muss dann auf die Menüoption "Freihand" oder "Stift" klicken, um das Steuerelement für freihandeingaben erneut zu aktivieren.

Wenn eine Erkennung installiert ist, ruft die Recognize Funktion die XML-Daten ab, die Pixelkoordinaten für jedes Formularfeld angeben. Die Koordinaten werden in Tintenraumkoordinaten konvertiert, und für jedes Formularfeld wird ein Rechteck definiert. Nachdem Rechtecke definiert wurden, findet die Funktion die Striche, die sich schneiden und innerhalb jedes Rechtecks liegen. Schließlich führt sie die Erkennung der Tinte durch und zeigt die Ergebnisse in einem Nachrichtenfeld an.

Tintenmenüpunkt

Der Klick-Ereignishandler im Freihandmenü aktiviert das InkPicture-Steuerelement.

Stiftmenüelement

Der Stiftmenü-Klickereignishandler führt die folgenden Aufgaben aus:

Menüelement bearbeiten

Der Klick-Ereignishandler für das Menü "Bearbeiten" ähnelt demjenigen im Stiftmenü. Es führt die folgenden Aufgaben aus:

  • Deaktiviert die Tintenerfassung.
  • Legt die EditingMode-Eigenschaft auf Select fest, wodurch der Benutzer Freihandauswahl ausführen kann.
  • Aktiviert die Freihandsammlung erneut und schaltet die Menüs "Stift", "Bearbeiten" und "Radierer" um, um den aktiven Modus anzugeben.

Radierermenüelement

Mit dem Klick-Ereignis-Handler des Radierermenüs wird das InkPicture-Steuerelement auf EditingModeDelete festgelegt, sodass der Benutzer Tinte löschen kann. Außerdem werden die Menüelemente "Stift", "Zeichnen" und "Radierer" umgeschaltet.

Menüelement löschen

Der Klickereignishandler des Menüs "Löschen" löscht die aktuelle Strichsammlung für das InkPicture-Steuerelement, wodurch alle Zeichnungen im Formular gelöscht werden.

Schließen des Formulars

Im generierten Code des Windows Form-Designers wird das InkPicture-Steuerelement der Komponentenliste des Formulars hinzugefügt, wenn das Formular initialisiert wird. Wenn das Formular geschlossen wird, wird das InkPicture-Steuerelement sowie die anderen Komponenten des Formulars durch die Dispose-Methode des Formulars entsorgt.

InkEdit-Steuerelement

InkPicture-Steuerelement