Yo, en general y siempre que se pueda, prefiero el test-doer antes que el try-catch, ya que el rendimiento es mucho mayor, así que me parece genial la respuesta con int.TryParse, float.TryParse, ... antes que poner un try-catch enorme.
El problema de rendimiento es que levantar excepciones y manejarlas es muy lento y por tanto se recomienda no utilizar las excepciones para controlar el flujo normal de una aplicación.
De todas formas en este ejemplo, da un poco igual, ya que la probabilidad de que falle la conversión el un código que contrala la cadena vacía es muy muy baja (ya que esto se controla con el keypress), y sólo con artimañas como las que comenta Pedro se podría saltar.
Así que en esta ocasión y sin que sirva de precedente, me parece perfecto usar el test-doer y el try-catch
Xavi Paper