在我们平时的控件运用中,时常会有这样的要求----一个TextBox中只允许用户去输入数字,而不允许其他的字符输入,通常的做法是截取TextBox的KeyDown事件,然后判断输入的字符的Char是否是0-9之间的数字。今天我要向你介绍另外一种做法,即重写控件的WndProc方法。这个方法既简单又准确,写这个控件主要不是为了向你介绍只允许用户输入数字的TextBox,而是希望大家善于运用WndProc方法来处理Windows消息。
using System;
using System.Windows.Forms;
namespace WindowsControlLibrary1
{
/**//// <summary>
/// 只能输入数字的文本框
/// </summary>
public class NumTextBox : TextBox
{
public NumTextBox()
{
}
protected override void WndProc(ref Message m)
{
int WM_CHAR = 0x0102;
if (m.Msg == WM_CHAR)
{
if (((char)m.WParam >= '0') && ((char)m.WParam <= '9') ||
(int)m.WParam == (int)Keys.Back || (int)m.WParam == (int)Keys.Delete)
{
base.WndProc(ref m);
}
}
else
{
base.WndProc(ref m);
}
}
}
}
using System.Windows.Forms;
namespace WindowsControlLibrary1
{
/**//// <summary>
/// 只能输入数字的文本框
/// </summary>
public class NumTextBox : TextBox
{
public NumTextBox()
{
}
protected override void WndProc(ref Message m)
{
int WM_CHAR = 0x0102;
if (m.Msg == WM_CHAR)
{
if (((char)m.WParam >= '0') && ((char)m.WParam <= '9') ||
(int)m.WParam == (int)Keys.Back || (int)m.WParam == (int)Keys.Delete)
{
base.WndProc(ref m);
}
}
else
{
base.WndProc(ref m);
}
}
}
}