Windows Forms'ta Kullanıcı Girdisi Doğrulama

Kullanıcılar uygulamanıza veri girdiğinde, uygulamanız kullanmadan önce verilerin geçerli olduğunu doğrulamak isteyebilirsiniz. Belirli metin alanlarının sıfır uzunlukta olmamasını, bir alanın telefon numarası veya başka bir iyi biçimlendirilmiş veri türü olarak biçimlendirilmesi veya bir dizenin veritabanının güvenliğini tehlikeye atmak için kullanılabilecek güvenli olmayan karakterler içermemesi gerekebilir. Windows Forms, uygulamanızdaki girişi doğrulamanız için çeşitli yollar sağlar.

MaskedTextBox Denetimi ile Doğrulama

Kullanıcıların telefon numarası veya parça numarası gibi iyi tanımlanmış bir biçimde veri girmesini zorunlu kılması gerekiyorsa, denetimi kullanarak MaskedTextBox bunu hızlı ve minimum kodla gerçekleştirebilirsiniz. Maske, metin kutusunda belirli bir konumda hangi karakterlerin girilebileceğini belirten bir maskeleme dilindeki karakterlerden oluşan bir dizedir. Denetim kullanıcıya bir dizi istem görüntüler. Kullanıcı yanlış bir giriş yazıyorsa, örneğin, kullanıcı bir basamak gerektiğinde bir harf yazıyorsa, denetim girişi otomatik olarak reddeder.

tarafından MaskedTextBox kullanılan maskeleme dili çok esnektir. Gerekli karakterleri, isteğe bağlı karakterleri, kısa çizgi ve parantez gibi değişmez karakterleri, para birimi karakterlerini ve tarih ayırıcılarını belirtmenizi sağlar. Denetim, bir veri kaynağına bağlı olduğunda da iyi çalışır. Veri Format bağlamadaki olay, gelen verileri maskeyle uyumlu olacak şekilde yeniden biçimlendirmek için kullanılabilir ve Parse olay, giden verileri veri alanının belirtimlerine uyacak şekilde yeniden biçimlendirmek için kullanılabilir.

Daha fazla bilgi için bkz . MaskedTextBox Denetimi.

Olay Temelli Doğrulama

Doğrulama üzerinde tam programlı denetim istiyorsanız veya karmaşık doğrulama denetimleri gerçekleştirmeniz gerekiyorsa, çoğu Windows Forms denetiminde yerleşik olarak bulunan doğrulama olaylarını kullanmanız gerekir. Serbest biçimli kullanıcı girişini kabul eden her denetimin, denetim veri doğrulaması gerektirdiğinde gerçekleşecek bir Validating olayı vardır. Olay işleme yönteminde Validating , kullanıcı girişini çeşitli yollarla doğrulayabilirsiniz. Örneğin, posta kodu içermesi gereken bir metin kutunuz varsa doğrulamayı aşağıdaki yollarla gerçekleştirebilirsiniz:

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

  • Posta kodunun belirli bir formda olması gerekiyorsa, kullanıcının girdiği verileri doğrulamak için normal ifadeleri kullanabilirsiniz. Örneğin, veya #####-####formunu ##### doğrulamak için normal ifadesini ^(\d{5})(-\d{4})?$kullanabilirsiniz. formunu A#A #A#doğrulamak için normal ifadesini [A-Z]\d[A-Z] \d[A-Z]\dkullanabilirsiniz. Normal ifadeler hakkında daha fazla bilgi için bkz . .NET Framework Normal İfadeleri ve Normal İfade Örnekleri.

  • Posta kodunun geçerli bir Birleşik Devletler Posta kodu olması gerekiyorsa, kullanıcının girdiği verileri doğrulamak için posta kodu Web hizmetini çağırabilirsiniz.

Olayı Validating türündeki CancelEventArgsbir nesnesi sağlanır. Denetimin verilerinin geçerli olmadığını belirlerseniz, bu nesnenin Validating Cancel özelliğini trueolarak ayarlayarak olayı iptal edebilirsiniz. Özelliğini ayarlamazsanız Cancel , Windows Forms bu denetim için doğrulamanın başarılı olduğunu varsayar ve olayı tetikler Validated .

bir içindeki e-posta adresini doğrulayan bir TextBoxkod örneği için bkz Validating. .

Veri Bağlama ve Olay Odaklı Doğrulama

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

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

Önemli

Olaydan sonra Validating gerçekleştirilen özel doğrulamanız varsa, bu veri bağlamayı etkilemez. Örneğin, veri bağlamayı iptal etmeye çalışan bir Validated olayda kodunuz varsa, veri bağlama yine de gerçekleşir. Bu durumda, olayda Validated doğrulama gerçekleştirmek için denetimin Veri Kaynağı Güncelleştirme Modu özelliğini ((Databindings)\(Gelişmiş)) OnValidation yerine Never olarak değiştirin ve doğrulama kodunuza CONTROL.DataBindings["<YOURFIELD>"].WriteValue() ekleyin.

Örtük ve Açık Doğrulama

Peki bir denetimin verileri ne zaman doğrulanır? Bu size, geliştiriciye bağlı. Uygulamanızın gereksinimlerine bağlı olarak örtük veya açık doğrulama kullanabilirsiniz.

Örtük Doğrulama

Örtük doğrulama yaklaşımı, kullanıcı verileri girerken verileri doğrular. Veriler bir denetime girilirken, basıldıkları sırada tuşları okuyarak veya kullanıcı giriş odağını bir denetimden alıp bir sonrakine geçtiğinde daha yaygın olarak verileri doğrulayabilirsiniz. Bu yaklaşım, kullanıcıya çalışırken veriler hakkında anında geri bildirimde bulunmak istediğinizde kullanışlıdır.

Bir denetim için örtük doğrulama kullanmak istiyorsanız, bu denetimin AutoValidate özelliğini veya EnableAllowFocusChangeolarak EnablePreventFocusChange ayarlamanız gerekir. Olayı iptal Validating ederseniz, denetimin davranışı, öğesine atadığınız değere AutoValidategöre belirlenir. atadıysanız EnablePreventFocusChange, olayı iptal etmek olayın gerçekleşmemasına neden Validated olur. Kullanıcı verileri geçerli bir girişe değiştirene kadar giriş odağı geçerli denetimde kalır. atadıysanızEnableAllowFocusChangeValidated, olayı iptal ettiğinizde olay gerçekleşmez, ancak odak yine de bir sonraki denetime dönüşür.

Disable özelliğine atamak örtük doğrulamayı AutoValidate 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 bir kerede doğrular. Kaydet düğmesine veya İleri bağlantısına tıklama gibi bir kullanıcı eylemine yanıt olarak verileri doğrulayabilirsiniz. Kullanıcı eylemi gerçekleştiğinde, aşağıdaki yollardan biriyle açık doğrulama tetikleyebilirsiniz:

  • Odağın kaybedildiği son denetimi doğrulamak için çağrısı Validate .

  • Form veya kapsayıcı denetimindeki tüm alt denetimleri doğrulamak için çağrısı ValidateChildren .

  • Denetimlerdeki verileri el ile doğrulamak için özel bir yöntem çağırın.

Windows Forms Denetimleri için Varsayılan Örtük Doğrulama Davranışı

Farklı Windows Forms denetimleri, özellikleri için farklı varsayılan değerlere AutoValidate sahiptir. Aşağıdaki tabloda en yaygın denetimler ve bunların varsayılanları gösterilmektedir.

Control Varsayılan Doğrulama Davranışı
ContainerControl Inherit
Form EnableAllowFocusChange
PropertyGrid Visual Studio'da kullanıma sunulmayan özellik
ToolStripContainer Visual Studio'da kullanıma sunulmayan özellik
SplitContainer Inherit
UserControl EnableAllowFocusChange

Formu Kapatma ve Doğrulamayı Geçersiz Kılma

Denetim, içerdiği veriler geçersiz olduğundan odağı koruduğunda, üst formu normal yöntemlerden biriyle kapatmak mümkün değildir:

  • Kapat düğmesine tıklayarak.

  • Sistem menüsünde Kapat'ı seçerek.

  • Yöntemini program aracılığıyla çağırarak Close .

Ancak bazı durumlarda, denetimlerdeki değerlerin geçerli olup olmadığına bakılmaksızın kullanıcının formu kapatmasına izin vermek isteyebilirsiniz. Doğrulamayı geçersiz kılabilir ve formun olayı için bir işleyici oluşturarak geçersiz veri içeren bir formu FormClosing kapatabilirsiniz. olayda özelliğini olarak falseayarlayınCancel. Bu, formu kapanmaya zorlar. Daha fazla bilgi ve örnek için bkz Form.FormClosing. .

Dekont

Formu bu şekilde kapanmaya zorlarsanız, formun denetimlerindeki henüz kaydedilmemiş tüm veriler kaybolur. Ayrıca, kalıcı formlar kapatıldığında denetimlerin içeriğini doğrulamaz. Odağı bir denetime kilitlemek için denetim doğrulamayı kullanmaya devam edebilirsiniz, ancak formu kapatmayla ilişkili davranış konusunda endişelenmeniz gerekmez.

Ayrıca bkz.