Sampel PenInputPanel

Sampel ini dibangun dari sampel Formulir Klaim Otomatis dengan mengintegrasikan objek PenInputPanel. Sampel berada di direktori C# PIPanel di folder AutoClaims.

Nota

Sampel ini mengharuskan sistem Anda dilengkapi dengan perangkat pena. Jika Anda hanya menggunakan mouse (atau perangkat penunjuk perangkat antarmuka non-manusia (HID) lainnya) PenInputPanel tidak muncul.

 

Untuk informasi selengkapnya tentang sampel Formulir Klaim Otomatis, lihat Sampel Formulir Klaim Otomatis . Untuk informasi selengkapnya tentang objek PenInputPanel, lihat Pemrograman Panel Input Menggunakan Kelas PenInputPanel.

Dalam sampel, Formulir Klaim Asuransi Kendaraan berisi lima bidang di mana pengguna diminta untuk menempatkan informasi yang relevan dengan klaim: nomor polis, nama tertanggung, tahun, merek, dan model mobil. Objek PenInputPanel dilampirkan ke setiap bidang input untuk memberikan cara mudah untuk memasukkan nilai dengan pena.

Ada dua teknik untuk melampirkan objek PenInputPanel ke bidang input pada formulir Anda. Teknik pertama adalah menetapkan instans terpisah objek ke setiap bidang input pada waktu desain. Yang kedua adalah membuat satu instans objek dan kemudian melampirkan instans objek tersebut pada waktu proses ke bidang saat menerima fokus. Sampel ini menunjukkan kedua teknik.

Ada kompromi yang terlibat dalam memutuskan teknik mana yang akan digunakan. Membuat instans unik objek untuk setiap bidang formulir memerlukan sedikit lebih banyak memori saat formulir dimuat. Namun, ini menghemat dari harus menangani peristiwa fokus untuk memberikan satu instans ke bidang saat ini pada waktu eksekusi.

Karena objek PenInputPanel hanya didukung pada PC Tablet, sampel membuat objek PenInputPanel dalam blok penanganan pengecualian.

Satu Objek per Bidang

Contoh menunjukkan teknik pertama (satu objek PenInputPanel per bidang) dengan menetapkan bidang input untuk nomor polis (inkEdPolicyNumber) dan nama tertanggung (inkEdName) masing-masing satu instans unik objek PenInputPanel. Konstruktor yang kelebihan beban untuk objek PenInputPanel dapat mengambil nama kontrol input sebagai argumen, sehingga mengaitkan kontrol. Baris berikut dari penanganan aktivitas Muat formulir menunjukkan hal ini:

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

Satu Objek per Formulir

Teknik kedua juga ditampilkan dalam sampel: satu instans objek PenInputPanel, pipShared, digunakan secara bersama-sama untuk bidang input Tahun, Merek, dan Model. Objek bersama dibuat dengan menggunakan konstruktor default.

pipShared = new PenInputPanel();

Menggunakan teknik ini mengharuskan formulir Anda hanya memiliki satu instans objek PenInputPanel. Ini menyimpan memori, tetapi Anda harus menambahkan kode untuk menangani peristiwa saat bidang input menerima fokus. Saat kontrol yang menggunakan instans bersama objek PenInputPanel mendapatkan fokus, atur properti AttachedEditControl milik objek PenInputPanel ke kontrol tersebut. Kode berikut menunjukkan penanganan aktivitas untuk peristiwa Enter bidang Tahun, Buat, dan 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);
}

Pastikan untuk mengatur properti apa pun yang perlu diatur saat fokus berubah ke kontrol baru. Di penanganan peristiwa sebelumnya, misalnya, properti Factoid diatur sesuai kebutuhan.

Pertimbangan Kegunaan

Ingatlah pertimbangan kegunaan berikut saat menggunakan objek PenInputPanel di aplikasi Anda.

Memposisikan PenInputPanel

Karena bidang diletakkan secara vertikal pada formulir dalam sampel ini, PenInputPanel antarmuka pengguna untuk setiap kontrol input diposisikan sedikit di sebelah kanan kontrol input untuk membuatnya lebih mudah digunakan. Ini mencegah PenInputPanel menutupi kotak edit berikutnya, sehingga lebih mudah untuk menargetkan kotak edit berikutnya.

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

Memilih Panel Input untuk Ditampilkan

Karena nomor kebijakan sering kali merupakan kombinasi angka, huruf, dan karakter lainnya, angka tersebut dapat rentan terhadap kesalahan pengenalan. Oleh karena itu, contoh mengatur panel default yang ditampilkan oleh objek PenInputPanel menjadi papan ketik ketika dihubungkan dengan kolom nomor kebijakan.

pipPolicyNumber.DefaultPanel = PanelType.Keyboard;

Perilaku default objek PenInputPanel adalah menggunakan panel yang terakhir dipilih pengguna.

Antarmuka Pengguna Koreksi Kerangka Kerja Layanan Teks

Dalam sampel ini, semua bidang input merupakan kontrol InkEdit. Ini signifikan karena kontrol InkEdit memiliki dukungan bawaan untuk Text Services Framework (TSF) dan dengan demikian mampu mendukung antarmuka pengguna untuk koreksi langsung pada input yang diterima dari objek PenInputPanel.

Nilai default untuk EnableTsf adalah TRUE. Hal ini menyebabkan objek PenInputPanel mencoba memulai Text Services Framework (TSF) pada kontrol terlampir. Jika berhasil, antarmuka pengguna koreksi akan muncul pada kontrol, dan memungkinkan akses ke alternatif pengenalan. Memanggil metode ini dengan parameter FALSE mencoba mematikan TSF pada kontrol terlampir.

Kontrol InkEdit sudah menyediakan antarmuka pengguna koreksi, tetapi dalam sampel EnableTsf digunakan untuk mengaktifkan PenInputPanel agar menggunakan konteks pengenal penyisipan TSF daripada fungsi SendInput untuk mengirim hasil pengenalan tulisan tangan ke dalam kontrol. Hasilnya adalah bahwa teks dapat disisipkan meskipun bidang tidak lagi memiliki fokus.

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

Menutup Formulir

Dalam kode yang dihasilkan Windows Form Designer, kontrol InkEdit dan InkPicture ditambahkan ke daftar komponen formulir saat formulir diinisialisasi. Ketika formulir ditutup, kontrol InkEdit dan InkPicture dibuang, serta komponen formulir lainnya, dengan metode Buang formulir. Metode Buang formulir juga membuang objek Ink yang dibuat untuk formulir.