Bagikan melalui


Gambaran umum cara memvalidasi input pengguna

Saat pengguna memasukkan data ke dalam aplikasi, Anda dapat memverifikasi bahwa data valid sebelum aplikasi Anda menggunakannya. Anda mungkin mengharuskan bidang teks tertentu tidak memiliki panjang nol, bidang yang diformat sebagai nomor telepon, atau bahwa string tidak berisi karakter yang tidak valid. Windows Forms menyediakan beberapa cara bagi Anda untuk memvalidasi input dalam aplikasi Anda.

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 kontrol MaskedTextBox. Sebuah masker adalah string yang terdiri dari karakter dari bahasa masking yang menentukan karakter yang dapat dimasukkan di posisi manapun dalam kotak teks. Kontrol menampilkan serangkaian perintah kepada pengguna. Jika pengguna mengetik entri yang salah, misalnya, pengguna mengetik huruf saat digit diperlukan, kontrol secara otomatis menolak input.

Bahasa masking yang digunakan MaskedTextBox itu 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 peristiwa Parse dapat digunakan untuk memformat ulang data keluar untuk mematuhi spesifikasi bidang data.

Validasi berbasis peristiwa

Jika Anda ingin kontrol terprogram penuh atas validasi, atau memerlukan pemeriksaan validasi yang kompleks, Anda harus menggunakan peristiwa validasi yang dibangun ke dalam sebagian besar kontrol Windows Forms. Setiap kontrol yang menerima masukan pengguna dalam bentuk bebas memiliki acara Validating yang dipicu setiap kali kontrol memerlukan validasi data. Validating Dalam kode penanganan aktivitas, 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 berada di 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 reguler ^(\d{5})(-\d{4})?$. Untuk memvalidasi formulir A#A #A#, Anda dapat menggunakan ekspresi reguler [A-Z]\d[A-Z] \d[A-Z]\d. Untuk informasi selengkapnya tentang ekspresi reguler, lihat Ekspresi Reguler .NET 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.

Objek tipe Validatingdisuplai ke acara CancelEventArgs. Jika Anda menentukan bahwa data kontrol tidak valid, batalkan peristiwa Validating dengan mengatur properti Cancel objek ini ke true. Jika Anda tidak mengatur properti Cancel, Windows Forms mengasumsikan bahwa validasi berhasil untuk kontrol tersebut dan memicu event Validated.

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

Kontrol terikat data validasi berbasis peristiwa

Validasi 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 peristiwa Validating. Jika Anda membatalkan peristiwa Validating, data tidak akan disinkronkan dengan sumber data.

Penting

Jika Anda memiliki validasi kustom yang terjadi setelah peristiwa Validating, itu tidak akan memengaruhi pengikatan data. Misalnya, jika Anda memiliki kode dalam peristiwa Validated yang mencoba membatalkan pengikatan data, pengikatan data akan tetap terjadi. Dalam hal ini, untuk melakukan validasi dalam peristiwa Validated, ubah properti Binding.DataSourceUpdateMode kontrol dari DataSourceUpdateMode.OnValidation ke DataSourceUpdateMode.Never, dan tambahkan your-control.DataBindings["field-name"].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. Validasi data dengan membaca tombol ketika ditekan, atau lebih umum setiap kali pengguna memindahkan fokus input dari kontrol. 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 AutoValidate kontrol tersebut ke EnablePreventFocusChange atau EnableAllowFocusChange. Jika Anda membatalkan peristiwa Validating, perilaku kontrol akan ditentukan oleh nilai apa yang Anda tetapkan untuk AutoValidate. Jika Anda menetapkan EnablePreventFocusChange, membatalkan peristiwa akan mencegah Validated peristiwa terjadi. Fokus input tetap pada kontrol saat ini hingga pengguna mengubah data ke format yang valid. Jika Anda menetapkan EnableAllowFocusChange, peristiwa Validated tidak akan terjadi saat Anda membatalkan peristiwa tersebut, tetapi fokus tetap akan beralih ke kontrol berikutnya.

Menetapkan Disable ke properti AutoValidate mencegah validasi implisit sama sekali. Untuk memvalidasi kontrol Anda, gunakan 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 yang telah kehilangan fokus.
  • Gunakan perintah ValidateChildren untuk memvalidasi semua kontrol anak dalam formulir atau kontrol kontainer.
  • Panggil metode kustom untuk memvalidasi data dalam kontrol secara manual.

Perilaku validasi bawaan implisit untuk kontrol

Elemen kontrol Windows Forms yang berbeda memiliki default yang berbeda untuk properti AutoValidate masing-masing. Tabel berikut ini memperlihatkan kontrol yang paling umum dan defaultnya.

Pengendalian Perilaku Validasi Bawaan
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 mengesampingkan 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 menu System>Tutup.
  • Dengan memanggil metode Close secara 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 valid dengan membuat handler untuk peristiwa FormClosing formulir. Dalam peristiwa tersebut, atur properti Cancel ke false. Ini memaksa formulir untuk ditutup. Untuk informasi selengkapnya dan contohnya, lihat Form.FormClosing.

Nota

Jika Anda memaksa formulir untuk menutup dengan cara ini, data yang tidak 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.

Lihat juga