Validasi Input Pengguna di Formulir Windows

Saat pengguna memasukkan data ke dalam aplikasi, Anda mungkin ingin memverifikasi bahwa data valid sebelum aplikasi Anda menggunakannya. Anda mungkin mengharuskan bidang teks tertentu tidak memiliki panjang nol, bahwa bidang diformat sebagai nomor telepon atau jenis data lain yang terbentuk dengan baik, atau bahwa string tidak berisi karakter tidak aman yang dapat digunakan untuk membahayakan keamanan database. Formulir Windows menyediakan beberapa cara bagi Anda untuk memvalidasi input dalam aplikasi Anda.

Validasi dengan Kontrol MaskedTextBox

Jika Anda perlu mengharuskan pengguna memasukkan data dalam format yang ditentukan dengan baik, seperti nomor telepon atau nomor bagian, Anda dapat menyelesaikannya dengan cepat dan dengan kode minimal dengan menggunakan MaskedTextBox kontrol. Masker adalah string yang terdiri dari karakter dari bahasa masking yang menentukan karakter mana yang dapat dimasukkan pada posisi tertentu dalam kotak teks. Kontrol menampilkan serangkaian perintah kepada pengguna. Jika pengguna mengetik entri yang salah, misalnya, pengguna mengetik huruf ketika digit diperlukan, kontrol akan secara otomatis menolak input.

Bahasa masking yang digunakan oleh MaskedTextBox sangat fleksibel. Ini memungkinkan Anda menentukan karakter yang diperlukan, karakter opsional, karakter harfiah, seperti tanda hubung dan tanda kurung, karakter mata uang, dan pemisah tanggal. Kontrol juga berfungsi dengan baik saat terikat ke sumber data. Peristiwa Format pada pengikatan data dapat digunakan untuk memformat ulang data masuk untuk mematuhi masker, dan Parse peristiwa dapat digunakan untuk memformat ulang data keluar untuk mematuhi spesifikasi bidang data.

Untuk informasi selengkapnya, lihat MaskedTextBox Control.

Validasi Berbasis Peristiwa

Jika Anda ingin kontrol terprogram penuh atas validasi, atau perlu melakukan pemeriksaan validasi yang kompleks, Anda harus menggunakan peristiwa validasi yang disertakan dalam sebagian besar kontrol Formulir Windows. Setiap kontrol yang menerima input pengguna bentuk bebas memiliki Validating peristiwa yang akan terjadi setiap kali kontrol memerlukan validasi data. Validating Dalam metode penanganan peristiwa, Anda dapat memvalidasi input pengguna dengan beberapa cara. Misalnya, jika Anda memiliki kotak teks yang harus berisi kode pos, Anda dapat melakukan validasi dengan cara berikut:

  • Jika kode pos harus termasuk dalam grup kode pos tertentu, Anda dapat melakukan perbandingan string pada input untuk memvalidasi data yang dimasukkan oleh pengguna. Misalnya, jika kode pos harus dalam set {10001, 10002, 10003}, maka Anda dapat menggunakan perbandingan string untuk memvalidasi data.

  • Jika kode pos harus dalam formulir tertentu, Anda dapat menggunakan ekspresi reguler untuk memvalidasi data yang dimasukkan oleh pengguna. Misalnya, untuk memvalidasi formulir ##### atau #####-####, Anda dapat menggunakan ekspresi ^(\d{5})(-\d{4})?$reguler . Untuk memvalidasi formulir A#A #A#, Anda dapat menggunakan ekspresi [A-Z]\d[A-Z] \d[A-Z]\dreguler . Untuk informasi selengkapnya tentang ekspresi reguler, lihat Ekspresi Reguler .NET Framework dan Contoh Ekspresi Reguler.

  • Jika kode pos harus berupa kode pos Amerika Serikat yang valid, Anda dapat memanggil layanan Web kode pos untuk memvalidasi data yang dimasukkan oleh pengguna.

Peristiwa Validating ini disediakan objek jenis CancelEventArgs. Jika Anda menentukan bahwa data kontrol tidak valid, Anda dapat membatalkan Validating acara dengan mengatur properti objek Cancel ini ke true. Jika Anda tidak mengatur Cancel properti, Formulir Windows akan mengasumsikan bahwa validasi berhasil untuk kontrol tersebut, dan menaikkan Validated peristiwa.

Untuk contoh kode yang memvalidasi alamat email di TextBox, lihat Validating.

Pengikatan Data dan Validasi Berbasis Peristiwa

Validasi sangat berguna ketika Anda telah mengikat kontrol Anda ke sumber data, seperti tabel database. Dengan menggunakan validasi, Anda dapat memastikan bahwa data kontrol Anda memenuhi format yang diperlukan oleh sumber data, dan tidak berisi karakter khusus seperti tanda kutip dan garis miring belakang yang mungkin tidak aman.

Saat Anda menggunakan pengikatan data, data dalam kontrol Anda disinkronkan dengan sumber data selama eksekusi Validating peristiwa. Jika Anda membatalkan Validating peristiwa, data tidak akan disinkronkan dengan sumber data.

Penting

Jika Anda memiliki validasi kustom yang terjadi setelah Validating peristiwa, itu tidak akan memengaruhi pengikatan data. Misalnya, jika Anda memiliki kode jika Validated mencoba membatalkan pengikatan data, pengikatan data akan tetap terjadi. Dalam hal ini, untuk melakukan validasi dalam Validated peristiwa, ubah properti Mode Pembaruan Sumber Data kontrol (di bawah (Pengikatan Data)\(Tingkat Lanjut)) dari OnValidation menjadi Never, dan tambahkan Control<.DataBindings["YOURFIELD>"].WriteValue() ke kode validasi Anda.

Validasi Implisit dan Eksplisit

Jadi kapan data kontrol divalidasi? Ini terserah Anda, pengembang. Anda dapat menggunakan validasi implisit atau eksplisit, tergantung pada kebutuhan aplikasi Anda.

Validasi Implisit

Pendekatan validasi implisit memvalidasi data saat pengguna memasukkannya. Anda dapat memvalidasi data saat data dimasukkan dalam kontrol dengan membaca tombol saat ditekan, atau lebih umum setiap kali pengguna mengambil fokus input menjauh dari satu kontrol dan berpindah ke kontrol berikutnya. Pendekatan ini berguna ketika Anda ingin memberikan umpan balik langsung kepada pengguna tentang data saat mereka bekerja.

Jika Anda ingin menggunakan validasi implisit untuk kontrol, Anda harus mengatur properti kontrol tersebut AutoValidate ke EnablePreventFocusChange atau EnableAllowFocusChange. Jika Anda membatalkan Validating peristiwa, perilaku kontrol akan ditentukan oleh nilai apa yang Anda tetapkan ke AutoValidate. Jika Anda menetapkan EnablePreventFocusChange, membatalkan acara akan menyebabkan Validated peristiwa tidak terjadi. Fokus input akan tetap pada kontrol saat ini hingga pengguna mengubah data ke input yang valid. Jika Anda menetapkan EnableAllowFocusChange, Validated peristiwa tidak akan terjadi saat Anda membatalkan acara, tetapi fokus masih akan berubah ke kontrol berikutnya.

Menetapkan Disable ke AutoValidate properti mencegah validasi implisit sama sekali. Untuk memvalidasi kontrol, Anda harus menggunakan validasi eksplisit.

Validasi Eksplisit

Pendekatan validasi eksplisit memvalidasi data pada satu waktu. Anda dapat memvalidasi data sebagai respons terhadap tindakan pengguna, seperti mengklik tombol Simpan atau tautan Berikutnya. Saat tindakan pengguna terjadi, Anda dapat memicu validasi eksplisit dengan salah satu cara berikut:

  • Panggil Validate untuk memvalidasi kontrol terakhir agar kehilangan fokus.

  • Panggil ValidateChildren untuk memvalidasi semua kontrol anak dalam formulir atau kontrol kontainer.

  • Panggil metode kustom untuk memvalidasi data dalam kontrol secara manual.

Perilaku Validasi Implisit Default untuk Kontrol Formulir Windows

Kontrol Formulir Windows yang berbeda memiliki default yang berbeda untuk propertinyaAutoValidate. Tabel berikut ini memperlihatkan kontrol yang paling umum dan defaultnya.

Kontrol Perilaku Validasi Default
ContainerControl Inherit
Form EnableAllowFocusChange
PropertyGrid Properti tidak terekspos di Visual Studio
ToolStripContainer Properti tidak terekspos di Visual Studio
SplitContainer Inherit
UserControl EnableAllowFocusChange

Menutup Formulir dan Mengganti Validasi

Ketika kontrol mempertahankan fokus karena data yang dikandungnya tidak valid, tidak mungkin untuk menutup formulir induk dengan salah satu cara yang biasa:

  • Dengan mengklik tombol Tutup .

  • Dengan memilih Tutup di menu Sistem .

  • Dengan memanggil metode secara Close terprogram.

Namun, dalam beberapa kasus, Anda mungkin ingin membiarkan pengguna menutup formulir terlepas dari apakah nilai dalam kontrol valid. Anda dapat mengambil alih validasi dan menutup formulir yang masih berisi data yang tidak FormClosing valid dengan membuat handler untuk peristiwa formulir. Dalam peristiwa tersebut, atur properti ke Cancelfalse. Ini memaksa formulir untuk ditutup. Untuk informasi selengkapnya dan contohnya, lihat Form.FormClosing.

Catatan

Jika Anda memaksa formulir untuk menutup dengan cara ini, data apa pun dalam kontrol formulir yang belum disimpan akan hilang. Selain itu, formulir modal tidak memvalidasi konten kontrol saat ditutup. Anda masih dapat menggunakan validasi kontrol untuk mengunci fokus ke kontrol, tetapi Anda tidak perlu khawatir tentang perilaku yang terkait dengan penutupan formulir.

Baca juga