La strategia che considero migliore e' quella di "impedire" il piu' possibile a priori all'utente di digitare qualcosa di sbagliato.
Per ASP.net e per WPF ci sono dei template anche estendibili per scrivere in fase dichiarativa cosa conterra' l'elemento di input.
Se per esempio nel WebForm di una pagina ASP.net si istanzia una TextBox e si vuole che contenga solo formule, allora potrai usare il filtro dichiarativo per imporre tale comportamento.
Codice:
<asp:TextBox runat="server" ID="TextBox3" />
<ajaxToolkit:FilteredTextBoxExtender ID="ftbe" runat="server"
TargetControlID="TextBox3"
FilterType="Custom, Numbers"
ValidChars="+-=/*()." />
Analogamente e anche piu' facilmente con WPF, dove il criterio di validazione e' customizzabile in modo decisamente semplice.
Relativamente a WinForm mi ricordo di avere usato una libreria che permetteva un comportamento simile.
Talvolta la fase di validazione dovra comunque essere fatta. Ma direi piu' leggera.
In Winform puoi dichiarare per una form/controllo quello che e' il pulsante di Conferma.
Al premere del pulsante il Framework scatenera' l'evento
Validating
su ciascuno dei componenti visuali della form/controllo
(Quindi tutte le textbox, etc.)
Potrai quindi sottoscriverai questo evento su qualcuno di questi componenti, e il corpo del metodo potra' elevare il fallimento della validazione, cosa che elevera' una Eccezione invece di chiamare il codice del metodo del pulsante di Conferma.
Cosa fare con l'eccezione sta poi a te, come per esempio visualizzare una dialog di errore.
Per quanto riguarda la strategia da adottare per descrivere il codice di validazione dipende dalla natura delle tue validazioni.
Se sono tante e sono tutte simili/uguali ti consiglierei di usare un subclassing dei controlli standard, ovvero di creare dei tuoi controlli con quel paio di validazioni che andrai a pilotare in fase dichiarativa e che potrai estendere con il passare del tempo quando dovessi trovare l'esigenza di nuove validazioni non ancora coperte.
Se invece i controlli da validare sono pochi e le validazioni sono tutte diverse e magari cambiano anche a runtime, ti consiglieri di dare un'occhiata al Decorator Pattern.