Beispiel für gescanntes Papierformular
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 verwendet, um Ergebnisse der Handschrifterkennung anzuzeigen.
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 FieldInfo
auch Elemente, die rechteckige Bereiche auf dem Formular definieren, in denen ein Benutzer freihand 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 der Pixelkoordinaten für jedes Feld.
Im Beispiel wird ein neues DataSet mit den in Formdata.xml enthaltenen Daten initialisiert:
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 Freihandsammlung wird dann für das InkPicture-Steuerelement aktiviert:
inkPicture1.InkEnabled = true;
Die Anwendung enthält Klickereignishandler für alle Menüs, die oben im Formular angezeigt werden.
Der Klickereignishandler des Menüs "Erkennen" deaktiviert die Freihandsammlung 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 die Freihandeingabe 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 Freihandraumkoordinaten konvertiert, und für jedes Formularfeld wird ein Rechteck definiert. Nachdem Rechtecke definiert wurden, findet die Funktion die Striche, die sich überschneiden und innerhalb jedes Rechtecks liegen. Schließlich wird die Freihanderkennung durchgeführt und die Ergebnisse in einem Meldungsfeld angezeigt.
Der InkPicture-Steuerelement wird über den InkPicture-Ereignishandler im Freihandmenü aktiviert.
Der Klickereignishandler des Stiftmenüs führt die folgenden Aufgaben aus:
- Deaktiviert die Freihandauflistung für das InkPicture-Steuerelement (was vor dem Ändern der EditingMode-Eigenschaft erforderlich ist).
- Legt die EditingMode-Eigenschaft fest, um Freihandeingaben zu sammeln.
- Aktiviert die Freihandsammlung für das InkPicture-Steuerelement erneut und schaltet die Menüs Stift, Auswahl und Radierer um, um den aktiven Modus anzuzeigen.
Der Klickereignishandler im Menü Bearbeiten ähnelt dem Ereignishandler des Stiftmenüs. Er führt die folgenden Aufgaben aus:
- Deaktiviert die Freihandsammlung.
- Legt die EditingMode-Eigenschaft auf Select fest, wodurch der Benutzer die Freihandauswahl ausführen kann.
- Aktiviert die Freihandsammlung erneut, und schaltet die Menüs Stift, Bearbeiten und Radierer um, um den aktiven Modus anzugeben.
Der Click-Ereignishandler des Radierermenüs legt das InkPicture-SteuerelementEditingMode auf Delete fest, wodurch ein Benutzer freihand löschen kann. Außerdem werden die Menüelemente Stift, Bearbeiten und Radierer umgeschaltet.
Der Clear-Menüklick-Ereignishandler löscht die aktuelle Strokes-Auflistung für das InkPicture-Steuerelement , wodurch alle Freihandeingaben im Formular gelöscht werden.
In windows Form Designer generiertem Code 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 verworfen.