.netで、数字のみ入力可能なTextBox

c#で半角数値しか入力できない(クリップボード貼り付けも不可)テキストボックスを作るコード。

class NumericTextBox : TextBox
{
    /// <summary>
    /// Windowsメッセージ処理のための定数
    /// </summary>
    private const int WM_PASTE = 0x302;
    private const int WM_CHAR = 0x102;

    /// <summary>
    /// 全角入力禁止のために、デフォルトIMEモードは無効にする
    /// </summary>
    protected override ImeMode DefaultImeMode
    {
        get { return ImeMode.Disable; }
    }
   
    /// <summary>
    /// 数値以外禁止
    /// </summary>
    /// <param name="m"></param>
    [System.Security.Permissions.SecurityPermission(
        System.Security.Permissions.SecurityAction.LinkDemand,
        Flags = System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)]
    protected override void WndProc(ref Message m)
    {
        switch (m.Msg)
        {
            case WM_PASTE:
                //数値以外の貼り付けを禁止する
                IDataObject iData = Clipboard.GetDataObject();
                if (iData != null && iData.GetDataPresent(DataFormats.Text))
                {
                    string sClipStr = (string)iData.GetData(DataFormats.Text);
                    //クリップボードの文字列が数字か調べる
                    if (!System.Text.RegularExpressions.Regex.IsMatch(
                        sClipStr,
                        @"^[0-9]+$"))
                        return;
                }
                break;

            case WM_CHAR:
                // 数値以外の入力を禁止する
                char sKeyChar =  (char)(m.WParam.ToInt32());

                // 制御文字の時は処理しない
                if (!char.IsControl(sKeyChar))
                {
                    // 数値(0-9)以外は、メッセージを破棄する
                    if (!('0' <= sKeyChar & sKeyChar <= '9'))
                    {
                        return;
                    }
                }
                break;

        }

        base.WndProc(ref m);
    }
}