Hello! καταρχήν κ εγώ αρχάριος είμαι αλλά θα σου πω τι ξέρω από ένα κεφαλαιάκι ενός book, το WinForms 2.0 Programming.
Καταρχήν ναι τα events κατά τα οποία κάνεις validating είναι ""λάθος"". Το σωστό event είναι το validating, το οποίο έτσι κ αλλιώς θα βαρέσει όταν χάνει το focus, όποτε το focus.leave δε χρειάζεται να το πειράξεις. Με αυτό τον τρόπο δε σε αφήνει να χάσει focus το textbox μέχρι να πάρει ορθή τιμή, το οποίο δεν είναι και το πιο user-friendly, είναι ένα πρώτο στάδιο validation.Επίσης, ό,τι δεν πάρει ποτέ focus, δε θα validate κιόλας, όποτε περνάς σε validation όλης της φόρμας.
Για να χάνουν focus και να μένει το (!), αλλάζεις απτα properties της φόρμας το AutoValidate -> EnableAllowFocusChange.
Με κώσδικα: this.AutoValidate = AutoValidate.EnableAllowFocusChange;
Επίσης, κάνεις validate κάθε control της φόρμας, που έχει "causesValidation" property, με τον handler του ok:
void okButton_Click(object sender, EventArgs e) {
if( !this.Validate() ) {
this.DialogResult = DialogResult.None; //an einai dialog, gia na mi to kleinei.
}
}
Αν έχεις controls μέσα σε groubboxes, θες !this.ValidateChildren() αντί Validate(). και τέλος έχει και validation constraints όπως selectable κλπ, δε ξέρω αν σε ενδιαφέρουν.
Ελπίζω να βοήθησα, να ναι καλά η "βίβλος" μου. Happy Validating.