kullanıcı girişini doğrulama hakkında genel bakış (Windows Forms .net)

Kullanıcılar uygulamanıza veri girerken, uygulamanız onu kullanmadan önce verilerin geçerli olduğunu doğrulamak isteyebilirsiniz. Belirli metin alanlarının sıfır uzunlukta olmaması, bir alanın telefon numarası olarak biçimlendirilmesi veya bir dizenin geçersiz karakterler içermediğinden emin olmanız gerekebilir. Windows Forms, uygulamanızda girişi doğrulamanız için kullanabileceğiniz çeşitli yollar sağlar.

Önemli

.NET 6 ve .NET 5 için masaüstü Kılavuzu belgeleri (.NET Core 3,1 dahil) yapım aşamasındadır.

MaskedTextBox Denetimi

Kullanıcıların, telefon numarası veya parça numarası gibi iyi tanımlanmış bir biçimde veri girmesini zorunlu kılmanız gerekiyorsa, bunu hızlı bir şekilde ve denetimi kullanarak en az kodla gerçekleştirebilirsiniz MaskedTextBox . Maske , metin kutusunda verilen herhangi bir konumda hangi karakterlerin girilebileceğini belirten bir maskeleme dilinden karakterlerden oluşan bir dizedir. Denetim, kullanıcıya bir komut istemi kümesi görüntüler. Kullanıcı yanlış bir giriş yazdığında, örneğin, Kullanıcı bir basamak gerektiğinde bir harf yazdığında, denetim otomatik olarak bu girişi reddeder.

Tarafından kullanılan maskeleme dili MaskedTextBox esnektir. Gerekli karakterleri, isteğe bağlı karakterleri, kısa çizgiler ve parantezler, para birimi karakterlerini ve Tarih ayırıcıları gibi sabit karakterler belirtmenize olanak tanır. Denetim Ayrıca bir veri kaynağına bağlandığında iyi de çalışacaktır. FormatVeri bağlamasındaki olay, gelen verileri maskeyle uyumlu olacak şekilde yeniden biçimlendirmek için kullanılabilir ve Parse olay, giden verileri veri alanının belirtimlerine uymak üzere yeniden biçimlendirmek için kullanılabilir.

Olay odaklı doğrulama

doğrulama üzerinde tam programlama denetimi yapmak istiyorsanız veya karmaşık doğrulama denetimlerine ihtiyaç duyuyorsanız, Windows Forms denetimlerinin çoğunda yerleşik olarak bulunan doğrulama olaylarını kullanmanız gerekir. Serbest biçimli Kullanıcı girişini kabul eden her denetim Validating , denetim veri doğrulaması gerektirdiğinde gerçekleşecek bir olaya sahiptir. ValidatingOlay işleme yönteminde, Kullanıcı girişini çeşitli yollarla doğrulayabilirsiniz. Örneğin, bir posta kodu içermesi gereken bir metin kutusu varsa doğrulamayı aşağıdaki yöntemlerle yapabilirsiniz:

  • Posta kodunun belirli bir posta kodu grubuna ait olması gerekiyorsa, Kullanıcı tarafından girilen verileri doğrulamak için girişte bir dize karşılaştırması yapabilirsiniz. Örneğin, posta kodu küme içinde olması gerekiyorsa {10001, 10002, 10003} , verileri doğrulamak için bir dize karşılaştırması kullanabilirsiniz.

  • Posta kodunun belirli bir biçimde olması gerekiyorsa, Kullanıcı tarafından girilen verileri doğrulamak için normal ifadeleri kullanabilirsiniz. Örneğin, formu doğrulamak için ##########-#### normal ifade kullanabilirsiniz ^(\d{5})(-\d{4})?$ . Formu doğrulamak için A#A #A# normal ifade kullanabilirsiniz [A-Z]\d[A-Z] \d[A-Z]\d . Normal ifadeler hakkında daha fazla bilgi için bkz. .net normal ifadeler ve normal ifade örnekleri.

  • Posta kodu geçerli bir Birleşik Devletler ZIP kodu olmalıdır, Kullanıcı tarafından girilen verileri doğrulamak için bir ZIP kodu Web hizmeti çağırabilirsiniz.

ValidatingOlay, türünde bir nesne olarak sağlanır CancelEventArgs . Denetimin verilerinin geçerli olmadığını belirlerseniz, Validating Bu nesnenin özelliğini olarak ayarlayarak olayı iptal edin Canceltrue . Cancelözelliği ayarlamazsanız Windows Forms, bu denetimde doğrulamanın başarılı olduğunu varsayacaktır ve Validated olayı yükseltir.

Bir e-posta adresini doğrulayan bir kod örneği için TextBox bkz Validating . olay başvurusu.

Olay odaklı doğrulama veriye bağlı denetimler

Denetim, denetimlerinizi bir veritabanı tablosu gibi bir veri kaynağına bağladığınızda yararlıdır. Doğrulama kullanarak, denetiminizin verilerinin veri kaynağı için gereken biçimi karşıladığından ve güvenilir olabilecek, tırnak işaretleri ve ters eğik çizgi gibi özel karakterler içermediğinden emin olabilirsiniz.

Veri bağlamayı kullandığınızda, denetimdeki veriler, olayın yürütülmesi sırasında veri kaynağıyla eşitlenir Validating . Olayı iptal ederseniz Validating veriler veri kaynağıyla eşitlenmez.

Önemli

Olay sonrasında gerçekleşen özel doğrulamanız varsa Validating , veri bağlamayı etkilemez. Örneğin, Validated veri bağlamayı iptal etmeyi deneyen bir olayda kodunuz varsa, veri bağlama yine de gerçekleşmeyecektir. Bu durumda, olayda doğrulama gerçekleştirmek için Validated denetimin Binding.DataSourceUpdateMode özelliğini DataSourceUpdateMode.OnValidation olarak değiştirin DataSourceUpdateMode.Never ve your-control.DataBindings["field-name"].WriteValue() doğrulama kodunuza ekleyin.

Örtük ve açık doğrulama

Bu nedenle, bir denetimin verileri ne zaman doğrulanacak? Bu, geliştiriciye yönelik. Uygulamanızın ihtiyaçlarına bağlı olarak örtük ya da açık doğrulama kullanabilirsiniz.

Örtük doğrulama

Örtük doğrulama yaklaşımı, verileri Kullanıcı girdiği şekilde doğrular. Tuşları, basılan şekilde okuyarak veya Kullanıcı giriş odağını denetimden çıktığında daha yaygın olarak okurken verileri doğrulayın. Bu yaklaşım, kullanıcıya çalışırken veriler hakkında anında geri bildirim vermek istediğinizde faydalıdır.

Bir denetim için örtük doğrulama kullanmak istiyorsanız, bu denetimin AutoValidate özelliğini veya olarak ayarlamanız gerekir EnablePreventFocusChangeEnableAllowFocusChange . Olayı iptal ederseniz Validating , denetimin davranışı atadığınız değere göre belirlenir AutoValidate . Atadıktan sonra EnablePreventFocusChange , olayı iptal etmek Validated olayın gerçekleşmemesine neden olur. Kullanıcı verileri geçerli bir biçime değiştirene kadar, giriş odağı geçerli denetimde kalır. Atadıktan sonra EnableAllowFocusChange , Validated olayı iptal ettiğinizde olay oluşmaz, ancak odak yine de sonraki denetime değişir.

DisableAutoValidate Özelliğe atama örtük doğrulamayı tamamen engeller. Denetimlerinizi doğrulamak için açık doğrulama kullanmanız gerekir.

Açık doğrulama

Açık doğrulama yaklaşımı verileri tek seferde doğrular. Bir Kaydet düğmesine veya bir sonraki bağlantıya tıklama gibi bir kullanıcı eylemine yanıt olarak verileri doğrulayabilirsiniz. Kullanıcı eylemi gerçekleştiğinde, aşağıdaki yollarla açık doğrulamayı tetikleyebilirsiniz:

  • ValidateOdağı kaybetmesi için son denetimi doğrulamak üzere çağırın.
  • ValidateChildrenBir form veya Kapsayıcı denetimindeki tüm alt denetimleri doğrulamak için çağırın.
  • Denetimlerde verileri el ile doğrulamak için özel bir yöntem çağırın.

Denetimler için varsayılan örtük doğrulama davranışı

farklı Windows Forms denetimlerinin özellikleri için farklı varsayılan değerleri vardır AutoValidate . Aşağıdaki tablo en sık kullanılan denetimleri ve bunların varsayılan değerlerini gösterir.

Denetim Varsayılan doğrulama davranışı
ContainerControl Inherit
Form EnableAllowFocusChange
PropertyGrid Özellik Visual Studio gösterilmez
ToolStripContainer Özellik Visual Studio gösterilmez
SplitContainer Inherit
UserControl EnableAllowFocusChange

Form kapatılıyor ve doğrulama geçersiz kılınıyor

İçerdiği veriler geçersiz olduğu için bir denetim odağı koruduğu zaman, üst formu her zamanki yollarla kapatmak olanaksızdır:

  • Kapat düğmesine tıklayın.
  • SistemKapat menüsünü seçerek.
  • CloseYöntemini programlı olarak çağırarak.

Ancak, bazı durumlarda, denetimlerde değerlerin geçerli olup olmamasına bakılmaksızın kullanıcının formu kapatmasını sağlamak isteyebilirsiniz. Formun olayı için bir işleyici oluşturarak doğrulamayı geçersiz kılabilir ve yine de geçersiz veri içeren bir formu kapatabilirsiniz FormClosing . Olayında Cancel özelliğini olarak ayarlayın false . Bu, formu kapatmaya zorlar. Daha fazla bilgi ve bir örnek için bkz Form.FormClosing ..

Not

Formun bu şekilde kapatılmasını zorlarsanız, form içindeki denetimlerin henüz kaydedilmemiş tüm verileri kaybolur. Ayrıca, kalıcı formlar, kapandıklarında denetimlerin içeriğini doğrulamaz. Odağı bir denetime kilitlemek için hala denetim doğrulaması kullanabilirsiniz, ancak formu kapatmayla ilişkili davranışla ilgilenmeniz gerekmez.

Ayrıca bkz.