Condividi tramite


Esempio penInputPanel

Questo esempio si basa sull'esempio Modulo attestazioni automatica integrando l'oggetto PenInputPanel . L'esempio si trova nella directory PIPanel C# nella cartella AutoClaims.

Nota

Questo esempio richiede che il sistema sia dotato di un dispositivo penna. Se si usa solo un mouse (o un altro dispositivo di interfaccia non umana) che punta il dispositivo PenInputPanel non viene visualizzato.

 

Per altre informazioni sull'esempio modulo attestazioni automatica, vedere Esempio di modulo attestazioni automatici. Per altre informazioni sull'oggetto PenInputPanel , vedere Programmazione del pannello di input usando la classe PenInputPanel.

Nell'esempio, il modulo attestazioni auto contiene cinque campi in cui viene chiesto all'utente di inserire informazioni rilevanti per l'attestazione: numero di criteri, nome assicurato, anno, make e modello dell'auto. Un oggetto PenInputPanel è collegato a ogni campo di input per fornire un modo semplice per immettere i valori con una penna.

Esistono due tecniche per collegare un oggetto PenInputPanel ai campi di input del modulo. La prima tecnica consiste nell'assegnare un'istanza separata dell'oggetto a ogni campo di input in fase di progettazione. Il secondo consiste nel creare una singola istanza dell'oggetto e quindi collegare l'istanza dell'oggetto in fase di esecuzione a un campo quando riceve lo stato attivo. Questo esempio illustra entrambe le tecniche.

Ci sono compromessi coinvolti nel decidere quale tecnica usare. La creazione di un'istanza univoca dell'oggetto per ogni campo modulo richiede leggermente più memoria quando il modulo viene caricato. Tuttavia, salva la necessità di gestire gli eventi di stato attivo per i campi per assegnare una singola istanza al campo corrente in fase di esecuzione.

Poiché l'oggetto PenInputPanel è supportato solo in un TABLET, l'esempio crea gli oggetti PenInputPanel all'interno di un blocco di gestione delle eccezioni.

Un oggetto per campo

L'esempio illustra la prima tecnica (un oggetto PenInputPanel per campo) assegnando i campi di input per il numero di criteri () e il nome assicurato (inkEdPolicyNumberinkEdName) un'istanza univoca dell'oggetto PenInputPanel. Un costruttore di overload per l'oggetto PenInputPanel può accettare il nome del controllo di input come argomento, associando così i controlli. Le righe seguenti dal gestore eventi Load del modulo mostrano quanto segue:

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

Un oggetto per modulo

La seconda tecnica viene illustrata anche nell'esempio: una singola istanza di un oggetto PenInputPanel , pipSharedè condivisa tra i campi di input Year, Make e Model. L'oggetto condiviso viene creato usando il costruttore predefinito.

pipShared = new PenInputPanel();

L'uso di questa tecnica richiede che il modulo disponga solo di una singola istanza dell'oggetto PenInputPanel . In questo modo viene salvata la memoria, ma è necessario aggiungere codice per gestire l'evento quando un campo di input riceve lo stato attivo. Quando un controllo che usa un'istanza condivisa di un oggetto PenInputPanel ottiene lo stato attivo, impostare la proprietà AttachedEditControl dell'oggetto PenInputPanel su tale controllo. Il codice seguente mostra un gestore eventi per gli eventi Year, Make e Model Enter .

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);
}

Assicurarsi di impostare tutte le proprietà che devono essere impostate quando lo stato attivo cambia in un nuovo controllo. Nei gestori eventi precedenti, ad esempio, la proprietà Factoid viene impostata in base alle esigenze.

Considerazioni sull'usabilità

Tenere presenti le seguenti considerazioni sull'usabilità quando si usa l'oggetto PenInputPanel nell'applicazione.

Posizionamento del PenInputPanel

Poiché i campi vengono disposti verticalmente sul modulo in questo esempio, l'interfaccia utente PenInputPanel per ogni controllo di input viene posizionata leggermente a destra del controllo di input per semplificare l'uso. Ciò impedisce al PenInputPanel di coprire la casella di modifica successiva, semplificando la destinazione della casella di modifica successiva.

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

Selezione del pannello di input da visualizzare

Poiché i numeri dei criteri sono spesso combinazioni di numeri, lettere e altri caratteri, possono essere soggetti a errori di riconoscimento. Pertanto, l'esempio imposta il pannello predefinito visualizzato dall'oggetto PenInputPanel per essere la tastiera quando viene collegata al campo numero di criteri.

pipPolicyNumber.DefaultPanel = PanelType.Keyboard;

Il comportamento predefinito dell'oggetto PenInputPanel consiste nell'usare il pannello selezionato l'ultimo.

Interfaccia utente correzione del framework di Servizi di testo

In questo esempio tutti i campi di input sono controlli InkEdit . Ciò è significativo perché il controllo InkEdit ha il supporto predefinito per Text Services Framework (TSF) ed è quindi in grado di supportare l'interfaccia utente di correzione sul posto per l'input ricevuto dall'oggetto PenInputPanel .

Il valore predefinito per EnableTsf è TRUE. In questo modo l'oggetto PenInputPanel tenta di avviare Il framework di Servizi di testo nel controllo collegato. In caso di esito positivo, l'interfaccia utente di correzione viene visualizzata nel controllo e consente l'accesso ai riconoscimenti alternativi. La chiamata a questo metodo con un parametro FALSE tenta di arrestare TSF nel controllo collegato.

Il controllo InkEdit fornisce già un'interfaccia utente di correzione, ma nell'esempio EnableTsf viene usato per abilitare PenInputPanel a usare il contesto del riconoscimento di inserimento TSF anziché la funzione SendInput per inviare i risultati del riconoscimento della grafia al controllo. Il risultato è che il testo può essere inserito anche se il campo non ha più lo stato attivo.

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

Chiusura del modulo

Nel codice generato da Windows Form Designer i controlli InkEdit e InkPicture vengono aggiunti all'elenco dei componenti del modulo quando viene inizializzato il modulo. Quando il modulo viene chiuso, i controlli InkEdit e InkPicture vengono eliminati, nonché gli altri componenti del modulo, dal metodo Dispose del modulo. Il metodo Dispose del modulo elimina anche gli oggetti Input penna creati per il modulo.