Personnellement je n'aime pas le principe de se bloquer sur la saisie d'un textbox car dans ce cas tu ne peux pas le quitter pour en remplir d'autres et revenir ensuite dessus.
Moi la dernière fois que j'ai du faire ceci j'ai utilisé la même méthode validating mais au lieu de faire un 'e.cancel = true' (qui te bloque sur le champ), j'ai ajouter un ErrorProvider sur le textbox qui t'affiche un petit icone avec un text sur l'erreur. ce qui permet de remplir toute ta page et de corriger les erreurs après par rapport au message du provider.
J'avais créé une classe avec mes propres valideurs selon le type de données et où je gérais les erreurs de validation.
C# quand tu nous tiens !!!