Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 2654
  • Last Modified:

C# Number Only Field with Backspace and Paste function

Hello all,

I am working in C# 2008 Express and want to have my text field only accept numbers however still allow backspace and paste insertion.  I have pasted in what i have thus far which allows the just numbers and the backspace but I am failing to conquer the paste function.  Any help would be great thanks.

        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            //if (!Char.IsDigit(e.KeyChar)||!Char.IsControl(e.KeyChar))
            if ((!Char.IsDigit(e.KeyChar)) && (e.KeyChar != Convert.ToChar(Keys.Back)))
                e.Handled = true;
        }
0
Andrew Bass
Asked:
Andrew Bass
  • 3
  • 2
1 Solution
 
NullableCommented:
Use this Code in the KeyDown Event



private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    // For Past Action
    if (e.Modifiers == Keys.Control && e.KeyCode == Keys.V)
        return;
    e.SuppressKeyPress = true;
}

Open in new window

0
 
Anurag ThakurTechnical ManagerCommented:
void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.V && (e.Modifiers & Keys.Control) != Keys.None)
    {
        TextBox tb = sender as TextBox;
        string textToPaste =  Clipboard.GetText();
        tb.Paste();
        e.Handled = true;
        e.SuppressKeyPress = true;
        Console.WriteLine("Pasted: {0}", textToPaste);
    }
}

But that won't intercept the user clicking on Edit->Paste...

You can do that by inherting new control from the text box control and overriding WndProc in order to detect WM_PASTE message. Here is an example for an overriden WndProc

private const int WM_PASTE = 0x0302;
  protected override void WndProc(ref Message m)
  {
   if (m.Msg == WM_PASTE)
   {
    MessageBox.Show("Paste");
   }
   base.WndProc(ref m);
  }
0
 
NullableCommented:
in this code  :
void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.V && (e.Modifiers & Keys.Control) != Keys.None)
    {
        TextBox tb = sender as TextBox;
        string textToPaste =  Clipboard.GetText();
        tb.Paste();
        e.Handled = true;
        e.SuppressKeyPress = true;
        Console.WriteLine("Pasted: {0}", textToPaste);
    }
}

Shift + V is not work
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
Andrew BassTechnical SupportAuthor Commented:
When I use your code i continue to get expected errors.
To clarify I DO WANT end users to be able to paste numbers into the text box field.  I have attached the coding in a txt doc if there are any ideas how to fix this up it would be appreciated.  Thanks
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            //if (!Char.IsDigit(e.KeyChar)||!Char.IsControl(e.KeyChar))
            if ((!Char.IsDigit(e.KeyChar)) && (e.KeyChar != Convert.ToChar(Keys.Back)))
                e.Handled = true;
        }
 
        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.V && (e.Modifiers & Keys.Control) != Keys.None)
                {
                TextBox tb = sender as TextBox;
                string textToPaste = Clipboard.GetText();
                tb.Paste();
                e.Handled = true;
                e.SuppressKeyPress = true;
                Console.WriteLine("Pasted: {0}", textToPaste);
                }
        }

Open in new window

0
 
NullableCommented:
i have writen a Control
it is a FilteredTextbox
i Place my code for u with a sample

it have this featurse :
numeric filterDecimal filter ( numeric + float point (.))Email filter Custom Filter ( set a char set for desire)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
 
namespace BM
{
    /// <summary>
    /// writed by Behrooz Mohammadi ( Nullabel )
    /// behrooz_pro@yahoo.com
    /// </summary>
    [DefaultBindingProperty("IntValue")]
    public partial class FilteredTextBox : TextBox
    {
        public FilteredTextBox()
        {
            InitializeComponent();
        }
 
        protected override void OnKeyPress(KeyPressEventArgs e)
        {
            base.OnKeyPress(e);
                                                                       
            if (!Active || e.KeyChar == '\b')
                return;
 
            if (Email)
            {
                return;
            }
            else
            {
                if (CustomFilter != "")
                {
                    if (CustomFilter.Contains(e.KeyChar))
                        return;
                }
 
                if (Numeric)
                {
                    if (char.IsNumber(e.KeyChar))
                        return;
                }
 
                if (AllowDecimals && !Text.Contains("."))
                    if (e.KeyChar == '.')
                        return;
            }
 
            e.Handled = true;
        }
 
        [Category("Setting")]
        public bool Active { get; set; }
 
        [Category("Setting")]
        public bool Numeric { get; set; }
 
        [Category("Setting")]
        public bool Email { get; set; }
 
        string _CustomFilter = "";
        private bool _allowDecimals = false;
        private string LastStr = "";
 
        [Category("Setting")]
        public string CustomFilter
        {
            get { return _CustomFilter; }
            set
            {
                _CustomFilter = value;
            }
        }
 
        [Category("Setting")]
        public bool AllowDecimals
        {
            get { return _allowDecimals; }
            set { _allowDecimals = value; }
        }
 
        [Bindable(true)]
        [Category("Setting")]
        public int? IntValue
        {
            get
            {
                if (string.IsNullOrEmpty(Text))
                    return null;
 
                int A;
                if (int.TryParse(Text, out A))
                    return A;
                else
                    return null;
            }
            set
            {
                if (value.HasValue)
                    this.Text = value.Value.ToString();
                else
                    Text = "";
            }
        }
 
        [Bindable(true)]
        [Category("Setting")]
        public decimal? DecimalValue
        {
            get
            {
                if (string.IsNullOrEmpty(Text))
                    return null;
 
                decimal A;
                if (decimal.TryParse(Text, out A))
                    return A;
                else
                    return null;
            }
            set
            {
                if (value.HasValue)
                    this.Text = value.Value.ToString();
                else
                    Text = "";
            }
        }
 
        protected override void OnTextChanged(EventArgs e)
        {
            if (!Active || string.IsNullOrEmpty(Text))
                return;
 
            if (Numeric)
                if (_allowDecimals)
                {
                    decimal k;
                    if (!decimal.TryParse(Text, out k))
                    {
                        int x = SelectionStart, l = SelectionLength;
                        this.Text = LastStr;
                        SelectionStart = x;
                        SelectionLength = l;
                        return;
                    }
                }
                else
                {
                    int k;
                    if (!int.TryParse(Text, out k))
                    {
                        int x = SelectionStart, l = SelectionLength;
                        this.Text = LastStr;
                        SelectionStart = x;
                        SelectionLength = l;
                        return;
                    }
                }
            LastStr = Text;
            base.OnTextChanged(e);
        }
 
        private void FilteredTextBox_Validating(object sender, CancelEventArgs e)
        {
            if (Email)
            {
                if (string.IsNullOrEmpty(Text))
                    return;
 
                string strRegex = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
                          @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
                          @".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
                Regex re = new Regex(strRegex);
                if (re.IsMatch(Text))
                    return;
                else
                {
                    e.Cancel = true;
                    MessageBox.Show("Enter Valid Email.");
                }
            }
        }
    }
}
 
// Designer.cs file :
 
namespace BM
{
    partial class FilteredTextBox
    {
        /// <summary> 
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;
 
        /// <summary> 
        /// Clean up any resources being used.
        /// </summary>        
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
 
        #region Component Designer generated code
 
        /// <summary> 
        /// Required method for Designer support - do not modify 
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.SuspendLayout();
            // 
            // FilteredTextBox
            // 
            this.Validating += new System.ComponentModel.CancelEventHandler(this.FilteredTextBox_Validating);
            this.ResumeLayout(false);
 
        }
 
        #endregion
    }
}

Open in new window

FilterTextbox.zip
0
 
Andrew BassTechnical SupportAuthor Commented:
Thanks for your help Nullable and the thoroughness!
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now