Delen via


PenInputPanel-voorbeeld

Dit voorbeeld is gebaseerd op het voorbeeld autoclaimformulier door het PenInputPanel--object te integreren. Het voorbeeld bevindt zich in de map C# PIPanel in de map AutoClaims.

Notitie

Dit voorbeeld vereist dat uw systeem is uitgerust met een penapparaat. Als u alleen een muis (of een ander niet-menselijke interfaceapparaat (HID) aanwijsapparaat) gebruikt, wordt de PenInputPanel niet weergegeven.

 

Zie voorbeeld van het formulier voor automatische claimsvoor meer informatie over het voorbeeld van het formulier autoclaims. Zie voor meer informatie over het object PenInputPanelProgrammeren van het invoervenster met behulp van de penInputPanel-klasse.

In het voorbeeld bevat het formulier Autoclaims vijf velden waarin de gebruiker wordt gevraagd om informatie te plaatsen die relevant is voor de claim: beleidsnummer, verzekerde naam, jaar, merk en model van de auto. Een PenInputPanel--object is gekoppeld aan elk invoerveld om een eenvoudige mogelijkheid te bieden voor het invoeren van waarden met een pen.

Er zijn twee technieken voor het koppelen van een PenInputPanel--object aan de invoervelden in het formulier. De eerste techniek is het toewijzen van een afzonderlijk exemplaar van het object aan elk invoerveld tijdens het ontwerp. Ten tweede maakt u één exemplaar van het object en koppelt u dat objectexemplaren vervolgens tijdens runtime aan een veld wanneer deze de focus krijgt. In dit voorbeeld worden beide technieken gedemonstreert.

Er zijn compromissen betrokken bij het bepalen welke techniek moet worden gebruikt. Voor het maken van een uniek exemplaar van het object voor elk formulierveld is iets meer geheugen vereist wanneer het formulier wordt geladen. Door dit te doen, hoeven de focusgebeurtenissen voor de velden niet te worden verwerkt, wat betekent dat er tijdens runtime slechts één instantie aan het huidige veld moet worden toegewezen.

Omdat het PenInputPanel- object alleen wordt ondersteund op een tablet-pc, worden in het voorbeeld de PenInputPanel-objecten gemaakt binnen een blok voor uitzonderingsafhandeling.

Eén object per veld

In het voorbeeld ziet u de eerste techniek (één PenInputPanel object per veld) door de invoervelden voor het beleidsnummer (inkEdPolicyNumber) en de verzekerde naam (inkEdName) toe te wijzen aan een uniek exemplaar van het Object PenInputPanel. Een overbelaste constructor voor het Object PenInputPanel kan de naam van het invoerbesturingselement als argument aannemen, waardoor de besturingselementen worden gekoppeld. In de volgende regels van de Load gebeurtenishandler van het formulier ziet u dit:

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

Eén object per formulier

De tweede techniek wordt ook weergegeven in het voorbeeld: één exemplaar van een PenInputPanel object, pipShared, wordt gedeeld tussen de invoervelden Year, Make en Model. Het gedeelde object wordt gemaakt met behulp van de standaardconstructor.

pipShared = new PenInputPanel();

Als u deze techniek gebruikt, moet uw formulier slechts één exemplaar van het PenInputPanel--object hebben. Dit bespaart geheugen, maar u moet code toevoegen om de gebeurtenis af te handelen wanneer een invoerveld de focus krijgt. Wanneer een bedieningselement dat een gedeeld exemplaar van een PenInputPanel-object gebruikt de focus krijgt, stelt u de eigenschap AttachedEditControl van het PenInputPanel-object in op dat bedieningselement. De volgende code toont een gebeurtenis-handler voor de Enter gebeurtenissen van de velden Year, Make en 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);
}

Zorg ervoor dat u eigenschappen instelt die moeten worden ingesteld wanneer de focus naar een nieuw besturingselement verandert. In de vorige gebeurtenis-handlers wordt bijvoorbeeld de eigenschap Factoid ingesteld.

Overwegingen voor bruikbaarheid

Houd rekening met de volgende overwegingen voor bruikbaarheid bij het gebruik van het PenInputPanel-object in uw toepassing.

De PenInputPanel positioneren

Omdat de velden verticaal op het formulier in dit voorbeeld zijn ingedeeld, wordt de PenInputPanel gebruikersinterface voor elk invoerbesturingselement enigszins rechts van het invoerbesturingselement geplaatst om het gemakkelijker te gebruiken. Hierdoor voorkomt u dat het PenInputPanel het volgende invoervak bedekt, waardoor het eenvoudiger is om het volgende invoervak te richten.

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

Invoerpaneel selecteren om weer te geven

Omdat beleidsnummers vaak combinaties zijn van cijfers, letters en andere tekens, kunnen ze gevoelig zijn voor herkenningsfouten. Daarom stelt het voorbeeld het standaardpaneel in dat door het PenInputPanel-object als het toetsenbord wordt weergegeven, wanneer het wordt bevestigd aan het veld beleidsnummer.

pipPolicyNumber.DefaultPanel = PanelType.Keyboard;

Het standaardgedrag van het PenInputPanel-object is het gebruik van het paneel dat de gebruiker het laatst heeft geselecteerd.

Textservicestructuurcorrectie gebruikersinterface

In dit voorbeeld worden alle invoervelden Besturingselementen voor InkEdit. Dit is belangrijk omdat het InkEdit-besturingselement ingebouwde ondersteuning heeft voor het Text Services Framework (TSF) en daardoor in staat is om de gebruikersinterface voor in-place correctie te ondersteunen voor invoer die afkomstig is van het PenInputPanel-object.

De standaardwaarde voor EnableTsf- is TRUE-. Dit zorgt ervoor dat het PenInputPanel--object probeert het Text Services Framework (TSF) op het gekoppelde besturingselement te starten. Als het succesvol is, wordt de gebruikersinterface voor correctie weergegeven in de bediening en wordt toegang tot herkenningsalternatieven toegestaan. Wanneer deze methode wordt aangeroepen met de parameter FALSE, wordt geprobeerd TSF op het gekoppelde besturingselement af te sluiten.

Het besturingselement InkEdit biedt al een correctiegebruikersinterface, maar in het voorbeeld wordt EnableTsf gebruikt om ervoor te zorgen dat de PenInputPanel de TSF-invoegherkenningscontext gebruikt in plaats van de functie SendInput, om de handgeschriftherkenningsresultaten naar het besturingselement te verzenden. Het resultaat is dat tekst kan worden ingevoegd, zelfs als het veld geen focus meer heeft.

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

Het formulier sluiten

In de gegenereerde code van Windows Form Designer worden de besturingselementen InkEdit en InkPicture toegevoegd aan de lijst met onderdelen van het formulier wanneer het formulier wordt geïnitialiseerd. Wanneer het formulier wordt gesloten, worden de InkEdit- en InkPicture-controls, evenals de andere onderdelen van het formulier, verwijderd door de Dispose-methode van het formulier. Met de methode Verwijderen van het formulier worden ook de inkt objecten verwijderd die voor het formulier zijn gemaakt.