共用方式為


PenInputPanel 範例

此範例會藉由整合 PenInputPanel 物件,以自動宣告表單範例為基礎。 此範例位於 AutoClaims 資料夾中的 C# PIPanel 目錄中。

注意

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

 

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

在範例中,自動宣告表單包含五個欄位,其中會要求使用者放置與宣告相關的資訊:原則編號、訂位名稱、年份、製作和汽車型號。 PenInputPanel物件會附加至每個輸入欄位,以提供使用手寫筆輸入值的簡單方法。

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

在決定要使用的技術時,有一項取捨。 為每個表單欄位建立物件的唯一實例,在載入表單時需要稍微多一些記憶體。 不過,它會儲存必須處理欄位的焦點事件,以在執行時間將單一實例指派給目前欄位。

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

每個欄位一個物件

此範例會藉由指派原則號碼 inkEdPolicyNumber () 和 (inkEdName) PenInputPanel 物件的唯一實例,來示範) 第一個技巧 (一個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 物件附加至原則編號欄位時,此範例會將 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 Form Designer產生的程式碼中,當表單初始化時,InkEditInkPicture控制項會新增至表單的元件清單。 當表單關閉時,表單的 Dispose 方法會處置 InkEdit 和 InkPicture 控制項,以及表單的其他元件。 表單的 Dispose 方法也會處置為表單建立的 Ink 物件。