Udostępnij przez


Przykład PenInputPanel

Ten przykład bazuje na przykładzie formularza zgłoszenia roszczeń automatycznych, poprzez integrację obiektu PenInputPanel. Przykład znajduje się w katalogu C# PIPanel w folderze AutoClaims.

Notatka

Ten przykład wymaga, aby system był wyposażony w urządzenie długopisowe. Jeśli używasz tylko myszy (lub innego urządzenia wskaźnikowego HID), panel PenInputPanel nie pojawia się.

 

Aby uzyskać więcej informacji na temat przykładowego formularza automatycznego oświadczeń, zobacz przykład formularza automatycznego oświadczeń. Aby uzyskać więcej informacji na temat obiektu PenInputPanel, zobacz Programowanie panelu wejściowego przy użyciu klasy PenInputPanel.

W przykładzie formularz zgłoszenia szkody komunikacyjnej zawiera pięć pól, w których użytkownik jest proszony o umieszczenie informacji istotnych dla roszczenia: numer polisy, nazwa ubezpieczonego, rok, markę i model samochodu. Obiekt PenInputPanel jest dołączony do każdego pola wejściowego, aby zapewnić łatwy sposób wprowadzania wartości za pomocą pióra.

Istnieją dwie techniki dołączania obiektu PenInputPanel do pól wejściowych w formularzu. Pierwszą techniką jest przypisanie oddzielnego wystąpienia obiektu do każdego pola wejściowego w czasie projektowania. Drugim krokiem jest utworzenie pojedynczego wystąpienia obiektu, a następnie dołączenie tego wystąpienia do pola w czasie działania programu, gdy pole otrzyma fokus. W tym przykładzie przedstawiono obie techniki.

Istnieją kompromisy związane z podjęciem decyzji, która technika ma być używana. Utworzenie unikatowego wystąpienia obiektu dla każdego pola formularza wymaga nieco większej ilości pamięci podczas ładowania formularza. Jednakże zmniejsza to potrzebę obsługi zdarzeń fokusu dla pól, aby przypisać pojedyncze wystąpienie do bieżącego pola podczas wykonywania programu.

Ponieważ obiekt PenInputPanel jest obsługiwany tylko na komputerze tablecie, przykład tworzy obiekty PenInputPanel w bloku obsługi wyjątków.

Jeden obiekt na pole

W przykładzie przedstawiono pierwszą technikę (jeden obiekt PenInputPanel na pole), poprzez przypisanie polom wejściowym dla numeru polisy (inkEdPolicyNumber) i nazwiska ubezpieczonego (inkEdName) unikalnej instancji obiektu PenInputPanel. Przeciążony konstruktor obiektu PenInputPanel może przyjąć nazwę kontrolki wejściowej jako argument, co powoduje skojarzenie kontrolek. Poniższe wiersze z obsługi zdarzeń formularza Load ilustrują to:

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

Jeden obiekt na formularz

Druga technika jest również pokazana w przykładzie: pojedyncze wystąpienie obiektu PenInputPanel, pipShared, jest współużytkowane między polami danych wejściowych Year, Make i Model. Obiekt udostępniony jest tworzony przy użyciu konstruktora domyślnego.

pipShared = new PenInputPanel();

Użycie tej techniki wymaga, aby formularz miał tylko jedno wystąpienie obiektu PenInputPanel. Zmniejsza to zużycie pamięci, ale należy dodać kod do obsługi zdarzenia, gdy pole wejściowe otrzymuje fokus. Gdy kontrolka używająca współużytkowanego wystąpienia obiektu PenInputPanel uzyskuje fokus, ustaw właściwość AttachedEditControl obiektu PenInputPanel dla tej kontrolki. Poniższy kod przedstawia obsługę zdarzeń Enter dla pól Year, Make i 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);
}

Pamiętaj, aby ustawić wszystkie właściwości, które należy ustawić, gdy fokus zmieni się na nową kontrolkę. Na przykład w poprzednich programach obsługi zdarzeń właściwość Factoid jest ustawiona odpowiednio.

Zagadnienia dotyczące użyteczności

Podczas korzystania z obiektu PenInputPanel w aplikacji należy wziąć pod uwagę następujące zagadnienia dotyczące użyteczności.

Pozycjonowanie PenInputPanel

Ponieważ pola są rozmieszczone w pionie na formularzu w tym przykładzie, PenInputPanel interfejs użytkownika dla każdej kontrolki wejściowej jest nieco umieszczony po prawej stronie kontrolki wejściowej, aby ułatwić jej użycie. Zapobiega to zakrywaniu przez panel wprowadzania piórem następnego pola edycji, co ułatwia dostęp do kolejnego pola.

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

Wybieranie panelu wejściowego do wyświetlenia

Ponieważ numery zasad są często kombinacjami cyfr, liter i innych znaków, mogą być podatne na błędy rozpoznawania. W związku z tym przykład ustawia domyślny panel wyświetlany przez obiekt PenInputPanel jako klawiaturę, gdy jest dołączony do pola numeru polisy.

pipPolicyNumber.DefaultPanel = PanelType.Keyboard;

Domyślnym zachowaniem obiektu PenInputPanel jest użycie panelu wybranego ostatnio.

Interfejs użytkownika korekcji struktury usług tekstowych

W tym przykładzie wszystkie pola wejściowe to kontrolki InkEdit. Jest to istotne, ponieważ kontrolka InkEdit ma wbudowaną obsługę Text Services Framework (TSF) i dlatego może obsługiwać interfejs użytkownika poprawki w miejscu dla danych wejściowych otrzymanych z obiektu PenInputPanel.

Wartość domyślna EnableTsf to TRUE. Powoduje to, że obiekt PenInputPanel próbuje uruchomić program Text Services Framework (TSF) w dołączonej kontrolce. W przypadku powodzenia interfejs użytkownika poprawek zostaje wyświetlony w kontrolce i umożliwia dostęp do alternatywnych wyników rozpoznawania. Wywołanie tej metody przy użyciu parametru FALSE próbuje zamknąć działanie TSF w kontrolce dołączonej.

Kontrolka InkEdit już udostępnia interfejs użytkownika korekcji, ale w przykładzie EnableTsf jest używana do włączenia PenInputPanel, aby móc używać kontekstu rozpoznawania wprowadzania TSF, zamiast funkcji SendInput, aby wysyłać wyniki rozpoznawania pisma ręcznego do kontrolki. Wynikiem jest to, że tekst można wstawić nawet wtedy, gdy pole nie ma już fokusu.

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

Zamykanie formularza

W wygenerowanym kodzie programu Windows Form Designer kontrolki InkEdit i InkPicture są dodawane do listy składników formularza podczas inicjowania formularza. Po zamknięciu formularza kontrolki InkEdit i InkPicture są usuwane, a także inne składniki formularza za pomocą metody Dispose formularza. Metoda Dispose formularza usuwa również obiekty pisma odręcznego , które zostały utworzone dla formularza.