C# 如何制作只接受数字的文本框?

C# 如何制作只接受数字的文本框?,c#,.net,winforms,textbox,C#,.net,Winforms,Textbox,我有一个带有文本框控件的windows窗体应用程序,我只想接受整数值。在过去,我通过重载KeyPress事件和删除不符合规范的字符来进行这种验证。我已经研究了MaskedTextBox控件,但我希望有一个更通用的解决方案,可以使用正则表达式,或者依赖于其他控件的值 理想情况下,按非数字字符不会产生任何结果,或立即向用户提供有关无效字符的反馈。您可以使用/Keypress事件,使用正则表达式过滤数字并采取一些措施。尝试一种新方法。它采用简单的掩码格式,因此您可以将输入限制为数字、日期或其他任何内容

我有一个带有文本框控件的windows窗体应用程序,我只想接受整数值。在过去,我通过重载KeyPress事件和删除不符合规范的字符来进行这种验证。我已经研究了MaskedTextBox控件,但我希望有一个更通用的解决方案,可以使用正则表达式,或者依赖于其他控件的值


理想情况下,按非数字字符不会产生任何结果,或立即向用户提供有关无效字符的反馈。

您可以使用/Keypress事件,使用正则表达式过滤数字并采取一些措施。

尝试一种新方法。它采用简单的掩码格式,因此您可以将输入限制为数字、日期或其他任何内容。

我根据上下文和您使用的标记假设您正在编写.NET C#应用程序。在这种情况下,您可以订阅文本更改事件,并验证每个按键笔划

private void textBox1\u TextChanged(对象发送者,事件参数e)
{
if(System.Text.RegularExpressions.Regex.IsMatch(textBox1.Text,“[^0-9]”)
{
MessageBox.Show(“请只输入数字”);
textBox1.Text=textBox1.Text.Remove(textBox1.Text.Length-1);
}
}
两个选项:

  • 改用a。NumericUpDown为您进行过滤,这很好。当然,它也让用户能够点击键盘上的上下箭头来增加和减少当前值

  • 处理适当的键盘事件以防止除数字输入以外的任何输入。我在标准文本框上成功地使用了这两个事件处理程序:

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) &&
            (e.KeyChar != '.'))
        {
                e.Handled = true;
        }
    
        // only allow one decimal point
        if ((e.KeyChar == '.') && ((sender as TextBox).Text.IndexOf('.') > -1))
        {
            e.Handled = true;
        }
    }
    
  • 如果文本框不允许小数点,则可以删除对“
    ”.
    ”的检查(以及随后对多个“
    ”.
    ”的检查)。如果您的文本框应该允许负值,您还可以为
    “-”
    添加一个复选框

    如果要限制用户的位数,请使用:
    textBox1.MaxLength=2;//这将允许用户只输入2位数字

    查看


    我已经在文本框上发布了使用ProcessCmdKey和OnKeyPress事件的解决方案。注释向您展示了如何使用正则表达式来验证按键并适当地阻止/允许。

    我已经为此做了一些准备


    它通过拦截TextChanged事件来工作。如果结果是一个好的数字,它将被存储。如果是错误的,最后一个良好的价值将恢复。源代码有点太大,无法在这里发布,但这处理了这个逻辑的核心。

    而且因为在一行中做事情总是更有趣

     private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = !char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar);
        }
    

    注意:这并不阻止用户复制/粘贴到此文本框。这不是一种自动清除数据的方法。

    很抱歉唤醒死者,但我想有人可能会发现这对将来的参考很有用

    这是我的处理方法。它处理浮点数,但可以很容易地修改为整数

    基本上,您只能按0-9

    之前只能有一个0

    将忽略所有其他字符,并保持光标位置

        private bool _myTextBoxChanging = false;
    
        private void myTextBox_TextChanged(object sender, EventArgs e)
        {
            validateText(myTextBox);
        }
    
        private void validateText(TextBox box)
        {
            // stop multiple changes;
            if (_myTextBoxChanging)
                return;
            _myTextBoxChanging = true;
    
            string text = box.Text;
            if (text == "")
                return;
            string validText = "";
            bool hasPeriod = false;
            int pos = box.SelectionStart;
            for (int i = 0; i < text.Length; i++ )
            {
                bool badChar = false;
                char s = text[i];
                if (s == '.')
                {
                    if (hasPeriod)
                        badChar = true;
                    else
                        hasPeriod = true;
                }
                else if (s < '0' || s > '9')
                    badChar = true;
    
                if (!badChar)
                    validText += s;
                else
                {
                    if (i <= pos)
                        pos--;
                }
            }
    
            // trim starting 00s
            while (validText.Length >= 2 && validText[0] == '0')
            {
                if (validText[1] != '.')
                {
                    validText = validText.Substring(1);
                    if (pos < 2)
                        pos--;
                }
                else
                    break;
            }
    
            if (pos > validText.Length)
                pos = validText.Length;
            box.Text = validText;
            box.SelectionStart = pos;
            _myTextBoxChanging = false;
        }
    
    private bool\u myTextBoxChanging=false;
    私有void myTextBox\u TextChanged(对象发送方,事件参数e)
    {
    validateText(myTextBox);
    }
    私有void validateText(文本框)
    {
    //停止多次更改;
    如果(_myTextBoxChanging)
    返回;
    _myTextBoxChanging=true;
    字符串text=box.text;
    如果(文本==“”)
    返回;
    字符串validText=“”;
    bool hasporiod=false;
    int pos=box.SelectionStart;
    for(int i=0;i'9')
    badChar=true;
    如果(!badChar)
    validText+=s;
    其他的
    {
    如果(i=2&&validText[0]=“0”)
    {
    如果(有效文本[1]!='。)
    {
    validText=validText.子串(1);
    如果(位置<2)
    pos--;
    }
    其他的
    打破
    }
    如果(位置>有效文本长度)
    pos=有效文本长度;
    box.Text=有效文本;
    box.SelectionStart=pos;
    _myTextBoxChanging=false;
    }
    
    下面是一个快速修改的int版本:

        private void validateText(TextBox box)
        {
            // stop multiple changes;
            if (_myTextBoxChanging)
                return;
            _myTextBoxChanging = true;
    
            string text = box.Text;
            if (text == "")
                return;
            string validText = "";
            int pos = box.SelectionStart;
            for (int i = 0; i < text.Length; i++ )
            {
                char s = text[i];
                if (s < '0' || s > '9')
                {
                    if (i <= pos)
                        pos--;
                }
                else
                    validText += s;
            }
    
            // trim starting 00s 
            while (validText.Length >= 2 && validText.StartsWith("00")) 
            { 
                validText = validText.Substring(1); 
                if (pos < 2) 
                    pos--; 
            } 
    
            if (pos > validText.Length)
                pos = validText.Length;
            box.Text = validText;
            box.SelectionStart = pos;
            _myTextBoxChanging = false;
        }
    
    private void validateText(文本框)
    {
    //停止多次更改;
    如果(_myTextBoxChanging)
    返回;
    _myTextBoxChanging=true;
    字符串text=box.text;
    如果(文本==“”)
    返回;
    字符串validText=“”;
    int pos=box.SelectionStart;
    for(int i=0;i'9')
    {
    如果(i=2&&validText.StartsWith(“00”))
    { 
    validText=validText.子串(1);
    如果(位置<2)
    pos--;
    } 
    如果(位置>有效文本长度)
    pos=有效文本长度;
    box.Text=有效文本;
    box.SelectionStart=pos;
    _myTextBoxChanging=false;
    }
    
    您可以使用
    TextChanged
    事件

    private void textBox_BiggerThan_TextChanged(object sender, EventArgs e)
    {
        long a;
        if (! long.TryParse(textBox_BiggerThan.Text, out a))
        {
            // If not int clear textbox text or Undo() last operation
            textBox_LessThan.Clear();
        }
    }
    

    这可能很有用。它允许“实”数值,包括正确的小数点和前面的加号或减号。从相关的按键事件中调用它

           private bool IsOKForDecimalTextBox(char theCharacter, TextBox theTextBox)
        {
            // Only allow control characters, digits, plus and minus signs.
            // Only allow ONE plus sign.
            // Only allow ONE minus sign.
            // Only allow the plus or minus sign as the FIRST character.
            // Only allow ONE decimal point.
            // Do NOT allow decimal point or digits BEFORE any plus or minus sign.
    
            if (
                !char.IsControl(theCharacter)
                && !char.IsDigit(theCharacter)
                && (theCharacter != '.')
                && (theCharacter != '-')
                && (theCharacter != '+')
            )
            {
                // Then it is NOT a character we want allowed in the text box.
                return false;
            }
    
    
    
            // Only allow one decimal point.
            if (theCharacter == '.'
                && theTextBox.Text.IndexOf('.') > -1)
            {
                // Then there is already a decimal point in the text box.
                return false;
            }
    
            // Only allow one minus sign.
            if (theCharacter == '-'
                && theTextBox.Text.IndexOf('-') > -1)
            {
                // Then there is already a minus sign in the text box.
                return false;
            }
    
            // Only allow one plus sign.
            if (theCharacter == '+'
                && theTextBox.Text.IndexOf('+') > -1)
            {
                // Then there is already a plus sign in the text box.
                return false;
            }
    
            // Only allow one plus sign OR minus sign, but not both.
            if (
                (
                    (theCharacter == '-')
                    || (theCharacter == '+')
                )
                && 
                (
                    (theTextBox.Text.IndexOf('-') > -1)
                    ||
                    (theTextBox.Text.IndexOf('+') > -1)
                )
                )
            {
                // Then the user is trying to enter a plus or minus sign and
                // there is ALREADY a plus or minus sign in the text box.
                return false;
            }
    
            // Only allow a minus or plus sign at the first character position.
            if (
                (
                    (theCharacter == '-')
                    || (theCharacter == '+')
                )
                && theTextBox.SelectionStart != 0
                )
            {
                // Then the user is trying to enter a minus or plus sign at some position 
                // OTHER than the first character position in the text box.
                return false;
            }
    
            // Only allow digits and decimal point AFTER any existing plus or minus sign
            if  (
                    (
                        // Is digit or decimal point
                        char.IsDigit(theCharacter)
                        ||
                        (theCharacter == '.')
                    )
                    &&
                    (
                        // A plus or minus sign EXISTS
                        (theTextBox.Text.IndexOf('-') > -1)
                        ||
                        (theTextBox.Text.IndexOf('+') > -1)
                    )
                    &&
                        // Attempting to put the character at the beginning of the field.
                        theTextBox.SelectionStart == 0
                )
            {
                // Then the user is trying to enter a digit or decimal point in front of a minus or plus sign.
                return false;
            }
    
            // Otherwise the character is perfectly fine for a decimal value and the character
            // may indeed be placed at the current insertion position.
            return true;
        }
    
    3解决方案

    (一)

    (二) msdn的另一个解决方案

    // Boolean flag used to determine when a character other than a number is entered.
    private bool nonNumberEntered = false;
    // Handle the KeyDown event to determine the type of character entered into the     control.
    private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
    // Initialize the flag to false.
    nonNumberEntered = false;
    // Determine whether the keystroke is a number from the top of the keyboard.
    if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
    {
        // Determine whether the keystroke is a number from the keypad.
        if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
        {
            // Determine whether the keystroke is a backspace.
            if (e.KeyCode != Keys.Back)
            {
                // A non-numerical keystroke was pressed.
                // Set the flag to true and evaluate in KeyPress event.
                nonNumberEntered = true;
            }
        }
    }
    
    来源

    3) 使用MaskedTextBox:

    下面是一个简单的
    //Add to the textbox's KeyPress event
    //using Regex for number only textBox
    
    private void txtBox_KeyPress(object sender, KeyPressEventArgs e)
    {
    if (!System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), "\\d+"))
    e.Handled = true;
    }
    
    // Boolean flag used to determine when a character other than a number is entered.
    private bool nonNumberEntered = false;
    // Handle the KeyDown event to determine the type of character entered into the     control.
    private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
    // Initialize the flag to false.
    nonNumberEntered = false;
    // Determine whether the keystroke is a number from the top of the keyboard.
    if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
    {
        // Determine whether the keystroke is a number from the keypad.
        if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
        {
            // Determine whether the keystroke is a backspace.
            if (e.KeyCode != Keys.Back)
            {
                // A non-numerical keystroke was pressed.
                // Set the flag to true and evaluate in KeyPress event.
                nonNumberEntered = true;
            }
        }
    }
    
    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (nonNumberEntered == true)
        {
           MessageBox.Show("Please enter number only..."); 
           e.Handled = true;
        }
    }
    
    public class Int32TextBox : TextBox
    {
        protected override void OnKeyPress(KeyPressEventArgs e)
        {
            base.OnKeyPress(e);
    
            NumberFormatInfo fi = CultureInfo.CurrentCulture.NumberFormat;
    
            string c = e.KeyChar.ToString();
            if (char.IsDigit(c, 0))
                return;
    
            if ((SelectionStart == 0) && (c.Equals(fi.NegativeSign)))
                return;
    
            // copy/paste
            if ((((int)e.KeyChar == 22) || ((int)e.KeyChar == 3))
                && ((ModifierKeys & Keys.Control) == Keys.Control))
                return;
    
            if (e.KeyChar == '\b')
                return;
    
            e.Handled = true;
        }
    
        protected override void WndProc(ref System.Windows.Forms.Message m)
        {
            const int WM_PASTE = 0x0302;
            if (m.Msg == WM_PASTE)
            {
                string text = Clipboard.GetText();
                if (string.IsNullOrEmpty(text))
                    return;
    
                if ((text.IndexOf('+') >= 0) && (SelectionStart != 0))
                    return;
    
                int i;
                if (!int.TryParse(text, out i)) // change this for other integer types
                    return;
    
                if ((i < 0) && (SelectionStart != 0))
                    return;
            }
            base.WndProc(ref m);
        }
    
    public class ValidatingTextBox : TextBox
    {
        private string _validText;
        private int _selectionStart;
        private int _selectionEnd;
        private bool _dontProcessMessages;
    
        public event EventHandler<TextValidatingEventArgs> TextValidating;
    
        protected virtual void OnTextValidating(object sender, TextValidatingEventArgs e) => TextValidating?.Invoke(sender, e);
    
        protected override void WndProc(ref Message m)
        {
            base.WndProc(ref m);
            if (_dontProcessMessages)
                return;
    
            const int WM_KEYDOWN = 0x100;
            const int WM_ENTERIDLE = 0x121;
            const int VK_DELETE = 0x2e;
    
            bool delete = m.Msg == WM_KEYDOWN && (int)m.WParam == VK_DELETE;
            if ((m.Msg == WM_KEYDOWN && !delete) || m.Msg == WM_ENTERIDLE)
            {
                DontProcessMessage(() =>
                {
                    _validText = Text;
                    _selectionStart = SelectionStart;
                    _selectionEnd = SelectionLength;
                });
            }
    
            const int WM_CHAR = 0x102;
            const int WM_PASTE = 0x302;
            if (m.Msg == WM_CHAR || m.Msg == WM_PASTE || delete)
            {
                string newText = null;
                DontProcessMessage(() =>
                {
                    newText = Text;
                });
    
                var e = new TextValidatingEventArgs(newText);
                OnTextValidating(this, e);
                if (e.Cancel)
                {
                    DontProcessMessage(() =>
                    {
                        Text = _validText;
                        SelectionStart = _selectionStart;
                        SelectionLength = _selectionEnd;
                    });
                }
            }
        }
    
        private void DontProcessMessage(Action action)
        {
            _dontProcessMessages = true;
            try
            {
                action();
            }
            finally
            {
                _dontProcessMessages = false;
            }
        }
    }
    
    public class TextValidatingEventArgs : CancelEventArgs
    {
        public TextValidatingEventArgs(string newText) => NewText = newText;
        public string NewText { get; }
    }
    
    public class Int32TextBox : ValidatingTextBox
    {
        protected override void OnTextValidating(object sender, TextValidatingEventArgs e)
        {
            e.Cancel = !int.TryParse(e.NewText, out int i);
        }
    }
    
    var vtb = new ValidatingTextBox();
    ...
    vtb.TextValidating += (sender, e) => e.Cancel = !int.TryParse(e.NewText, out int i);
    
    void TextBox_KeyDown(object sender, KeyEventArgs e)
            {
                char c = Convert.ToChar(e.PlatformKeyCode);
                if (!char.IsDigit(c))
                {
                    e.Handled = true;
                }
            }
    
    char[] c = txtGetCustomerId.Text.ToCharArray();
    bool IsDigi = true;
    
    for (int i = 0; i < c.Length; i++)
         {
           if (c[i] < '0' || c[i] > '9')
          { IsDigi = false; }
         }
     if (IsDigi)
        { 
         // do something
        }
    
    public partial class IntegerBox : TextBox 
    {
        public IntegerBox()
        {
            InitializeComponent();
            this.Text = 0.ToString();
        }
    
        protected override void OnPaint(PaintEventArgs pe)
        {
            base.OnPaint(pe);
        }
    
        private String originalValue = 0.ToString();
    
        private void Integerbox_KeyPress(object sender, KeyPressEventArgs e)
        {
            originalValue = this.Text;
        }
    
        private void Integerbox_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if(String.IsNullOrWhiteSpace(this.Text))
                {
                    this.Text = 0.ToString();
                }
                this.Text = Convert.ToInt64(this.Text.Trim()).ToString();
            }
            catch (System.OverflowException)
            {
                MessageBox.Show("Value entered is to large max value: " + Int64.MaxValue.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.Text = originalValue;
            }
            catch (System.FormatException)
            {                
                this.Text = originalValue;
            }
            catch (System.Exception ex)
            {
                this.Text = originalValue;
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK , MessageBoxIcon.Error);
            }
        }       
    }
    
    private void txt3_KeyPress(object sender, KeyPressEventArgs e)
    {
        for (int h = 58; h <= 127; h++)
        {
            if (e.KeyChar == h)             //58 to 127 is alphabets tat will be         blocked
            {
                e.Handled = true;
            }
        }
        for(int k=32;k<=47;k++)
        {
            if (e.KeyChar == k)              //32 to 47 are special characters tat will 
            {                                  be blocked
                e.Handled = true;
            }
        }
    }
    
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            string actualdata = string.Empty;
            char[] entereddata = textBox1.Text.ToCharArray();
            foreach (char aChar in entereddata.AsEnumerable())
            {
                if (Char.IsDigit(aChar))
                {
                    actualdata = actualdata + aChar;
                    // MessageBox.Show(aChar.ToString());
                }
                else
                {
                    MessageBox.Show(aChar + " is not numeric");
                    actualdata.Replace(aChar, ' ');
                    actualdata.Trim();
                }
            }
            textBox1.Text = actualdata;
        }
    
    public class IntTextBox : TextBox
    {
        string PreviousText = "";
        int BackingResult;
    
        public IntTextBox()
        {
            TextChanged += IntTextBox_TextChanged;
        }
    
        public bool HasResult { get; private set; }
    
        public int Result
        {
            get
            {
                return HasResult ? BackingResult : default(int);
            }
        }
    
        void IntTextBox_TextChanged(object sender, EventArgs e)
        {
            HasResult = int.TryParse(Text, out BackingResult);
    
            if (HasResult || string.IsNullOrEmpty(Text))
            {
                // Commit
                PreviousText = Text;
            }
            else
            {
                // Revert
                var changeOffset = Text.Length - PreviousText.Length;
                var previousSelectionStart =
                    Math.Max(0, SelectionStart - changeOffset);
    
                Text = PreviousText;
                SelectionStart = previousSelectionStart;
            }
        }
    }
    
    public class ParsableTextBox : TextBox
    {
        TryParser BackingTryParse;
        string PreviousText = "";
        object BackingResult;
    
        public ParsableTextBox()
            : this(null)
        {
        }
    
        public ParsableTextBox(TryParser tryParse)
        {
            TryParse = tryParse;
    
            TextChanged += ParsableTextBox_TextChanged;
        }
    
        public delegate bool TryParser(string text, out object result);
    
        public TryParser TryParse
        {
            set
            {
                Enabled = !(ReadOnly = value == null);
    
                BackingTryParse = value;
            }
        }
    
        public bool HasResult { get; private set; }
    
        public object Result
        {
            get
            {
                return GetResult<object>();
            }
        }
    
        public T GetResult<T>()
        {
            return HasResult ? (T)BackingResult : default(T);
        }
    
        void ParsableTextBox_TextChanged(object sender, EventArgs e)
        {
            if (BackingTryParse != null)
            {
                HasResult = BackingTryParse(Text, out BackingResult);
            }
    
            if (HasResult || string.IsNullOrEmpty(Text))
            {
                // Commit
                PreviousText = Text;
            }
            else
            {
                // Revert
                var changeOffset = Text.Length - PreviousText.Length;
                var previousSelectionStart =
                    Math.Max(0, SelectionStart - changeOffset);
    
                Text = PreviousText;
                SelectionStart = previousSelectionStart;
            }
        }
    }
    
    public class ParsableTextBox<T> : TextBox
    {
        TryParser BackingTryParse;
        string PreviousText;
        T BackingResult;
    
        public ParsableTextBox()
            : this(null)
        {
        }
    
        public ParsableTextBox(TryParser tryParse)
        {
            TryParse = tryParse;
    
            TextChanged += ParsableTextBox_TextChanged;
        }
    
        public delegate bool TryParser(string text, out T result);
    
        public TryParser TryParse
        {
            set
            {
                Enabled = !(ReadOnly = value == null);
    
                BackingTryParse = value;
            }
        }
    
        public bool HasResult { get; private set; }
    
        public T Result
        {
            get
            {
                return HasResult ? BackingResult : default(T);
            }
        }
    
        void ParsableTextBox_TextChanged(object sender, EventArgs e)
        {
            if (BackingTryParse != null)
            {
                HasResult = BackingTryParse(Text, out BackingResult);
            }
    
            if (HasResult || string.IsNullOrEmpty(Text))
            {
                // Commit
                PreviousText = Text;
            }
            else
            {
                // Revert
                var changeOffset = Text.Length - PreviousText.Length;
                var previousSelectionStart =
                    Math.Max(0, SelectionStart - changeOffset);
    
                Text = PreviousText;
                SelectionStart = previousSelectionStart;
            }
        }
    }
    
    private void textBox1_TextChanged(object sender, EventArgs e)
    {
    
        double parsedValue;
    
        if (!double.TryParse(textBox1.Text, out parsedValue))
        {
            textBox1.Text = "";
        }
    }
    
    /// <summary>Represents a Windows text box control that only allows input that matches a regular expression.</summary>
    public class RegexTextBox : TextBox
    {
        [NonSerialized]
        string lastText;
    
        /// <summary>A regular expression governing the input allowed in this text field.</summary>
        [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        public virtual Regex Regex { get; set; }
    
        /// <summary>A regular expression governing the input allowed in this text field.</summary>
        [DefaultValue(null)]
        [Category("Behavior")]
        [Description("Sets the regular expression governing the input allowed for this control.")]
        public virtual string RegexString {
            get {
                return Regex == null ? string.Empty : Regex.ToString();
            }
            set {
                if (string.IsNullOrEmpty(value))
                    Regex = null;
                else
                    Regex = new Regex(value);
            }
        }
    
        protected override void OnTextChanged(EventArgs e) {
            if (Regex != null && !Regex.IsMatch(Text)) {
                int pos = SelectionStart - Text.Length + (lastText ?? string.Empty).Length;
                Text = lastText;
                SelectionStart = Math.Max(0, pos);
            }
    
            lastText = Text;
    
            base.OnTextChanged(e);
        }
    }
    
    private void txtFirstValue_MouseLeave(object sender, EventArgs e)
    {
        int num;
        bool isNum = int.TryParse(txtFirstValue.Text.Trim(), out num);
    
        if (!isNum && txtFirstValue.Text != String.Empty)
        {
            MessageBox.Show("The First Value You Entered Is Not a Number, Please Try Again", "Invalid Value Detected", MessageBoxButtons.OK, MessageBoxIcon.Error);
            txtFirstValue.Clear();
        }
    }
    
    <asp:TextBox runat="server" ID="txtFrom"
         onkeypress="if(isNaN(String.fromCharCode(event.keyCode))) return false;">
    
    private void ultraTextEditor1_TextChanged(object sender, EventArgs e)
    {
        string append="";
        foreach (char c in ultraTextEditor1.Text)
        {
            if ((!Char.IsNumber(c)) && (c != Convert.ToChar(Keys.Back)))
            {
    
            }
            else
            {
                append += c;
            }
        }
    
        ultraTextEditor1.Text = append;
    }   
    
    numericUpDown1.Controls[0].Visible = false;
    
    YourNumericUpDown.Controls[0].visible = false 
    
    private void numeroCuenta_TextChanged(object sender, EventArgs e)
    {
        string org = numeroCuenta.Text;
        string formated = string.Concat(org.Where(c => (c >= '0' && c <= '9')));
        if (formated != org)
        {
            int s = numeroCuenta.SelectionStart;
            if (s > 0 && formated.Length > s && org[s - 1] != formated[s - 1]) s--;
            numeroCuenta.Text = formated;
            numeroCuenta.SelectionStart = s;
        }
    }
    
    public abstract class ValidatedTextBox : TextBox {
        private string m_lastText = string.Empty;
        protected abstract bool IsValid(string text);
        protected sealed override void OnTextChanged(EventArgs e) {
            if (!IsValid(Text)) {
                var pos = SelectionStart - Text.Length + m_lastText.Length;
                Text = m_lastText;
                SelectionStart = Math.Max(0, pos);
            }
            m_lastText = Text;
            base.OnTextChanged(e);
        }
    }
    
    public abstract class RegexedTextBox : ValidatedTextBox {
        private readonly Regex m_regex;
        protected RegexedTextBox(string regExpString) {
            m_regex = new Regex(regExpString);
        }
        protected override bool IsValid(string text) {
            return m_regex.IsMatch(Text);
        }
    }
    
    public sealed class PositiveNumberTextBox : RegexedTextBox {
        public PositiveNumberTextBox() : base(@"^\d*$") { }
    }
    
    public sealed class PositiveFloatingPointNumberTextBox : RegexedTextBox {
        public PositiveFloatingPointNumberTextBox()
            : base(@"^(\d+\" + CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator + @")?\d*$") { }
    }