只能输入数字的文本框(重写WndProc)

Posted on 2006-05-19 23:39  小镇姑娘她爹  阅读(2219)  评论(2编辑  收藏  举报

在我们平时的控件运用中,时常会有这样的要求----一个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);
            }
        }
    }
}