Quando eu precisei de um campo numérico em C#, tentei usar o MaskedTexBox.Eu particularmente não gostei deste componente e neste caso eu reinventei a roda e acabei criando o MaskedNumber. Eu coloquei alguns tipos já pré-formatados como: Peso, Valor, Moeda, …
Desenvolvedores.Net – TechBlog
Blog sobre tecnologia