共用方式為


PenInputPanel 範例

此範例透過整合 PenInputPanel 物件,以自動理賠表單範例為基礎進行擴展。 此範例位於 AutoClaims 資料夾中的 C# PIPanel 目錄中。

注意

此範例需要您的系統配備手寫筆裝置。 如果您只使用滑鼠(或其他非人為介面裝置 (HID) 指向裝置),則 PenInputPanel 不會出現。

 

如需自動宣告表單範例的詳細資訊,請參閱 自動宣告表單範例。 如需 PenInputPanel 物件的詳細資訊,請參閱使用 PenInputPanel 類別 程式設計輸入面板。

在範例中,「汽車索賠窗體」包含五個字段,要求使用者輸入與索賠相關的資訊:原則號碼、保險名稱、年份、製造和型號。 PenInputPanel 物件會附加至每個輸入欄位,以提供簡單的方法,以使用手寫筆輸入值。

PenInputPanel 物件附加至表單上的輸入欄位有兩種技巧。 第一個技巧是在設計階段將物件的不同實例指派給每個輸入欄位。 第二個是建立物件的單一實例,然後在運行時間將該物件實例附加至收到焦點的欄位。 此範例示範這兩種技術。

在決定要使用哪一種技術方面有取捨。 針對每個表單域建立物件的唯一實例,在載入表單時需要稍微多一點記憶體。 不過,它省去了處理欄位焦點事件的麻煩,從而可在執行時將單一實例分配給目前欄位。

因為 PenInputPanel 物件只支援平板電腦,因此此範例會在例外狀況處理區塊內建立 PenInputPanel 物件。

每個欄位一個物件

此範例示範第一個技術(每個欄位有一個 PenInputPanel 物件),即透過將保單號碼(inkEdPolicyNumber)和被保險人姓名(inkEdName)的輸入欄位指派給 PenInputPanel 物件的唯一實例。 PenInputPanel 物件的多載建構函式可以接受輸入控件的名稱做為自變數,從而將控件產生關聯。 表單的 Load 事件處理程式中的下列幾行程式碼顯示出這一點:

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

每個表單一個物件

第二個技巧也會顯示在範例中:PenInputPanel 物件 pipShared的單一實例會在 Year、Make 和 Model 輸入字段之間共用。 共用物件是使用預設建構函式所建立。

pipShared = new PenInputPanel();

使用這項技術,您的表單必須僅有一個 PenInputPanel 物件的實例。 這樣可節省記憶體,但您必須新增程序代碼,以在輸入字段收到焦點時處理事件。 當使用 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 對象的預設行為是使用使用者最後選取的面板。

文字服務架構更正使用者介面

在此範例中,所有輸入欄位都是 InkEdit 控制項。 這很重要,因為 InkEdit 控制項內建對 Text Services Framework (TSF) 的支援,因此能夠提供接收自 PenInputPanel 物件輸入的就地修正介面。

EnableTsf 的預設值為 TRUE 。 這會導致 PenInputPanel 對象嘗試在附加控件上啟動 Text Services Framework (TSF)。 如果成功,更正使用者介面將顯示在控制項中,並允許存取辨識選擇。 以 FALSE 作為參數呼叫此方法,會嘗試關閉已連接控件上的 TSF。

InkEdit 控件已經提供更正使用者介面,但在範例 中,會使用 enableTsf 來啟用 PenInputPanel,以使用 TSF 插入辨識器內容,而不是 SendInput 函式,將手寫辨識結果傳送至控件。 結果是即使欄位不再具有焦點,也可以插入文字。

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

關閉表單

在 Windows 窗體設計工具產生的程式代碼中,當表單初始化時,InkEditInkPicture 控件會新增至表單的元件清單。 當表單關閉時,表單的 Dispose 方法將處置 InkEdit 和 InkPicture 控制項,以及表單的其他元件。 表單的 Dispose 方法也會處置那些為該表單創建的 Ink 物件。