Try this:
csharp Code:
public class NumericTextBox : TextBox
{
public NumericTextBox() { }
protected virtual int[] AlwaysValid
{
get { return new int[] { 1, 3, 8, 13, 22, 24 }; } //Allow paste, copy, backspace etc...
}
public override string Text
{
get
{ return base.Text; }
set
{
if (value.ToCharArray().Where((char c) => !char.IsLetterOrDigit(c)).Count() == 0)
base.Text = value;
}
}
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 0x302:
string pasteText = Clipboard.GetText();
if (pasteText.ToCharArray().Where((char c) => !char.IsLetterOrDigit(c)).Count() > 0)
{
return; //Invalid paste string
}
break;
case 0x102:
case 0x106:
case 0x286:
char keyChar = (char)m.WParam;
if (!char.IsLetterOrDigit(keyChar) &&
(Array.IndexOf(this.AlwaysValid, m.WParam.ToInt32()) == -1))
{
return; //Invalid key char press
}
break;
}
base.WndProc(ref m);
}
}