Share via


PenInputPanel サンプル

このサンプルは、 PenInputPanel オブジェクトを統合することで、自動要求フォームのサンプルに基づいています。 サンプルは、AutoClaims フォルダーの C# PIPanel ディレクトリにあります。

Note

このサンプルでは、システムにペン デバイスが装備されている必要があります。 マウス (または他の人間以外のインターフェイス デバイス (HID) ポインティング デバイス) のみを使用している場合、 PenInputPanel は表示されません。

 

自動要求フォームのサンプルの詳細については、「 自動要求フォームのサンプル」を参照してください。 PenInputPanel オブジェクトの詳細については、「PenInputPanel クラスを使用した入力パネルのプログラミング」を参照してください。

このサンプルでは、自動請求フォームには、保険金、保険被保険者名、年、自動車のモデルなど、クレームに関連する情報を入力するように求める 5 つのフィールドが含まれています。 PenInputPanel オブジェクトは、ペンで値を入力するための簡単な手段を提供するために、各入力フィールドにアタッチされます。

PenInputPanel オブジェクトをフォームの入力フィールドにアタッチするには、2 つの手法があります。 最初の手法は、デザイン時にオブジェクトの個別のインスタンスを各入力フィールドに割り当てることです。 2 つ目は、オブジェクトの 1 つのインスタンスを作成し、フォーカスを受け取ったときに実行時にそのオブジェクト インスタンスをフィールドにアタッチすることです。 このサンプルでは、両方の手法を示します。

使用する手法の決定にはトレードオフがあります。 フォーム フィールドごとにオブジェクトの一意のインスタンスを作成するには、フォームが読み込まれるときに少し多くのメモリが必要です。 ただし、実行時に 1 つのインスタンスを現在のフィールドに割り当てるために、フィールドのフォーカス イベントを処理する必要が省けます。

PenInputPanel オブジェクトはタブレット PC でのみサポートされているため、このサンプルでは、例外処理ブロック内に PenInputPanel オブジェクトを作成します。

フィールドごとに 1 つのオブジェクト

このサンプルでは、 PenInputPanel オブジェクトの一意のインスタンスをポリシー番号 () と被保険者名 (inkEdPolicyNumber) の入力フィールドに割り当てることで、最初の手法 (inkEdNameフィールドごとに 1 つの PenInputPanel オブジェクト) を示します。 PenInputPanel オブジェクトのオーバーロードされたコンストラクターは、入力コントロールの名前を引数として受け取り、コントロールを関連付けることができます。 フォームの Load イベント ハンドラーの次の行は、これを示しています。

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

フォームごとに 1 つのオブジェクト

2 番目の手法もサンプルに示されています。 PenInputPanel オブジェクトの単一のインスタンスである は、 pipSharedYear、Make、Model の各入力フィールド間で共有されます。 共有オブジェクトは、既定のコンストラクターを使用して作成されます。

pipShared = new PenInputPanel();

この手法を使用するには、 フォームに PenInputPanel オブジェクトのインスタンスが 1 つだけ必要です。 これによりメモリが節約されますが、入力フィールドがフォーカスを受け取ったときにイベントを処理するコードを追加する必要があります。 PenInputPanel オブジェクトの共有インスタンスを使用するコントロールがフォーカスを取得したら、PenInputPanel オブジェクトの AttachedEditControl プロパティをそのコントロールに設定します。 次のコードは、Year、Make、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);
}

フォーカスが新しいコントロールに変更されたときに設定する必要があるプロパティは必ず設定してください。 たとえば、前のイベント ハンドラーでは、 Factoid プロパティが適切に設定されています。

使いやすさに関する考慮事項

アプリケーションで PenInputPanel オブジェクトを使用する場合は、次の使いやすさに関する考慮事項に注意してください。

PenInputPanel の配置

このサンプルでは、フォーム上にフィールドが垂直方向に配置されているため、各入力コントロールの PenInputPanel ユーザー インターフェイスは、使用しやすくするために、入力コントロールの右側に少し配置されます。 これにより、PenInputPanel が次の編集ボックスを隠すのを防ぎ、次の編集ボックスを簡単にターゲットにできます。

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

表示する入力パネルの選択

ポリシー番号は、多くの場合、数字、文字、およびその他の文字の組み合わせであるため、認識エラーが発生する可能性があります。 したがって、このサンプルでは、 PenInputPanel オブジェクトによって表示される既定のパネルを、ポリシー番号フィールドに接続するときにキーボードに設定します。

pipPolicyNumber.DefaultPanel = PanelType.Keyboard;

PenInputPanel オブジェクトの既定の動作は、ユーザーが最後に選択したパネルを使用することです。

Text Services Framework の修正ユーザー インターフェイス

このサンプルでは、すべての入力フィールドは InkEdit コントロールです。 これは、InkEdit コントロールに Text Services Framework (TSF) のサポートが組み込まれているため、 PenInputPanel オブジェクトから受信した入力のインプレース修正ユーザー インターフェイスをサポートできるため、重要です。

EnableTsf の既定値は TRUE です。 これにより、 PenInputPanel オブジェクトは、アタッチされたコントロールで Text Services Framework (TSF) を起動しようとします。 成功した場合、修正ユーザー インターフェイスがコントロールに表示され、認識代替へのアクセスが許可されます。 FALSE パラメーターを指定してこのメソッドを呼び出すと、アタッチされたコントロールの TSF のシャットダウンが試行されます。

InkEdit コントロールには既に修正ユーザー インターフェイスが用意されていますが、サンプルの EnableTsf では、PenInputPanelSendInput 関数ではなく TSF 挿入認識エンジン コンテキストを使用して手書き認識結果をコントロールに送信できるようにします。 結果として、フィールドにフォーカスがなくなった場合でもテキストを挿入できます。

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

フォームを閉じる

Windows フォーム Designer生成されたコードでは、フォームの初期化時に、InkEdit コントロールと InkPicture コントロールがフォームのコンポーネント リストに追加されます。 フォームが閉じると、InkEdit コントロールと InkPicture コントロールが、フォームの Dispose メソッドによってフォームの他のコンポーネントと同様に 破棄 されます。 フォームの Dispose メソッドは、フォーム用に作成された Ink オブジェクトも破棄します。