如何在C#winform中 Textbox.text中让输入的信息只能是数字,不能是符号或字母,这个if不知该怎么写尤其是(不能是符号或字母)!,谢谢各位大侠!不胜感激!,联系人:小史,QQ723201219

解决方案 »

  1.   

    使用异常处理啊!看输入的文本能不能转换为INT型的
    不能就把文本清空`
      

  2.   

    在对文本框内容验证的函数中进行如下工作:
    先获取文本内容,用INT32的PARASE函数进行串格式化,但将它放在TRY块内,如果是合法的数字串返回1,否则在CATCH子句中捕获异常,并返回-1
      

  3.   

    用Text控件的KeyPress事件,并且输入以下代码
    private void txtPrice_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!(e.KeyChar>='0'&& e.KeyChar<='9'|| e.KeyChar==8))
                {
                    e.Handled = true;
                }
            }
      

  4.   

    自己扩展一下TextBox.以下是我用的一个NumberBox控件源码,可以参考一下。功能是:只能输入数字(含+、-号);TextBox为disable时还可以设定字体颜色及textbox边框颜色(这可是当初客户比较苛刻的要求,说disable后字体颜色太淡了,看不清)using System;
    using System.ComponentModel;
    using System.Collections;
    using System.Diagnostics;
    using System.Windows.Forms;
    using System.Drawing;
    using System.Drawing.Drawing2D;namespace USWinControls
    {
        ///<summary>
        ///NumberBox 的摘要说明。
        ///</summary>
        [ToolboxItem(true)]
        [ToolboxBitmap(typeof(TextBox)), Description("UBIQ NumberBox")]
        public class NumberBox : System.Windows.Forms.TextBox
        {
            /// <summary> 
            /// 获得当前进程,以便重绘控件 
             /// </summary> 
            /// <param name="hWnd"></param> 
            /// <returns></returns> 
            [System.Runtime.InteropServices.DllImport("user32.dll")]
            static extern IntPtr GetWindowDC(IntPtr hWnd);
            [System.Runtime.InteropServices.DllImport("user32.dll")]
            static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);        #region  Constractor
            public NumberBox()
                : base()
            {
                PermitChars = new char[13];
                Init();
            }
            #endregion        #region Property
            private double _MaxValue;
            private double _MinValue;
            private char[] _PermitChars;
            private int _DecimalLength;
            private double _DefaultValue;        /// <summary> 
            /// 边框颜色 
            /// </summary> 
            private Color _BorderColor = Color.FromArgb(0xA7, 0xA6, 0xAA);        /// <summary> 
            /// 失效时的字符颜色 
            /// </summary> 
            private Color _DisableForeColor = Color.FromName("DimGray");        /// <summary> 
            /// 失效时的背景颜色 
            /// </summary> 
            private Color _DisableBackColor = Color.FromName("Control");        public double MaxValue
            {
                get { return _MaxValue; }            set { _MaxValue = value; }
            }        public double MinValue
            {
                get { return _MinValue; }
                set { _MinValue = value; }
            }        public double DefaultValue
            {
                get { return _DefaultValue; }
                set
                {
                    _DefaultValue = value;
                    base.Text = _DefaultValue.ToString();
                }
            }        public char[] PermitChars
            {
                get { return _PermitChars; }
                set { _PermitChars = value; }
            }
            public int DecimalLength
            {
                get { return _DecimalLength; }
                set { _DecimalLength = value; }
            }        /// <summary> 
            /// 边框颜色 
            /// </summary> 
            [Category("外观"),
           Description("获得或设置控件的边框颜色"),
           DefaultValue(typeof(Color), "#A7A6AA")]
            public Color BorderColor
            {
                get { return this._BorderColor; }
                set
                {
                    this._BorderColor = value;
                    this.Invalidate();
                }
            }        /// <summary>
            /// 失效时的字符颜色
            /// </summary>
            [DefaultValue(typeof(Color), "#A7A6AA")]
            [Description("失效时的字符颜色")]
            public Color DisableForeColor
            {
                get { return this._DisableForeColor; }
                set
                {
                    this._DisableForeColor = value;
                    this.Invalidate();
                }
            }        /// <summary>
            /// 失效时的背景色
            /// </summary>
            [DefaultValue(typeof(Color), "#A7A6AA")]
            [Description("失效时的背景色")]
            public Color DisableBackColor
            {
                get { return this._DisableBackColor; }
                set
                {
                    this._DisableBackColor = value;
                    this.Invalidate();
                }
            }        #endregion        #region  Initialize
            public void Init()
            {
                PermitChars = new char[] { (char)43, (char)45, (char)46, (char)48, (char)49, (char)50, (char)51, (char)52, (char)53, (char)54, (char)55, (char)56, (char)57 };
                DecimalLength = 0;
                MaxValue = 0;
                MinValue = 0;
                DefaultValue = 0;
            }        #endregion        #region  WndProc Method (Overrides)
            protected override void WndProc(ref System.Windows.Forms.Message m)
            {            const int WM_CHAR = 0x102;
                const int WM_PASTE = 0x302;
                const int WM_PAINT = 0x000f;            //
                switch (m.Msg)
                {
                    case WM_CHAR:
                        KeyPressEventArgs eKeyPress = new KeyPressEventArgs((char)m.WParam.ToInt32());
                        OnChar(eKeyPress);                    if (eKeyPress.Handled)
                        {
                            return;
                        }                    break;                case WM_PASTE:
                        if (((PermitChars != null)) && (PermitChars.Length > 0))
                        {
                            OnPaste(new System.EventArgs());
                            return;
                        }                    break;            }            base.WndProc(ref m);            //
                if (WM_PAINT == m.Msg && !this.Enabled && m.HWnd == this.Handle)    //textbox disable
                {
                    Graphics g = this.CreateGraphics();
                    Rectangle rect;                //失效时的背景颜色
                    rect = new Rectangle(0, 0, base.Size.Width - 1, base.Size.Height - 1);
                    g.FillRectangle(new SolidBrush(DisableBackColor), rect);                //失效时的字符颜色
                    //文字描画   
                    int x = 0, y = 0;
                    Size s = g.MeasureString(Text, Font).ToSize();                if (this.BorderStyle == BorderStyle.Fixed3D)
                        y = (Height - s.Height) / 2 - 1;
                    else
                        y = (Height - s.Height) / 2;                switch (TextAlign)
                    {
                        case HorizontalAlignment.Left:
                            x = 2;
                            break;
                        case HorizontalAlignment.Center:
                            if (s.Width > Width)
                                x = 2;
                            else
                                x = (Width - s.Width) / 2 + 2;
                            break;
                        case HorizontalAlignment.Right:
                            if (s.Width > Width)
                                x = 2;
                            else
                                x = Width - s.Width - 2;
                            break;
                    }
                    rect = new Rectangle(x, y, base.Size.Width, base.Size.Height);
                    g.DrawString(base.Text, base.Font, new SolidBrush(DisableForeColor), rect);
                    g.Dispose();
                }
                //
                if (m.Msg == 0xf || m.Msg == 0x133)
                {
                    IntPtr hDC = GetWindowDC(m.HWnd);
                    if (hDC.ToInt32() == 0)
                    {
                        return;
                    }                //只有在边框样式为FixedSingle时自定义边框样式才有效 
                    if (this.BorderStyle == BorderStyle.FixedSingle)
                    {
                        //边框Width为1个像素 
                        System.Drawing.Pen pen = new Pen(this._BorderColor, 1); ;                    //绘制边框 
                        System.Drawing.Graphics g = Graphics.FromHdc(hDC);
                        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
                        g.DrawRectangle(pen, 0, 0, this.Width - 1, this.Height - 1);
                        pen.Dispose();
                    }
                }        }        #endregion
      

  5.   

    内容太长了,继续。        #region  OnChar Method (Overridable)        //Method of call when character string is transmitted to client area 
            protected virtual void OnChar(KeyPressEventArgs e)
            {            if (char.IsControl(e.KeyChar))
                {
                    switch (e.KeyChar)
                    {
                        case (char)13:
                        case (char)9:
                            if (this.MaxValue != 0)
                            {
                                if (Convert.ToInt32(this.Text) > this.MaxValue)
                                {
                                    this.SelectAll();
                                    e.Handled = true;
                                    return;
                                }                        }
                            if (this.MinValue != 0)
                            {
                                if (Convert.ToInt32(this.Text) < this.MinValue)
                                {
                                    this.SelectAll();
                                    e.Handled = true;
                                    return;
                                }                        }                        break;                }                return;            }            if (!HasPermitChars(e.KeyChar, this.PermitChars))
                {
                    e.Handled = true;
                    return;
                }            switch (e.KeyChar)
                {
                    case (char)46:
                        //CASE [ . ] 
                        try
                        {
                            if (DecimalLength == 0)
                            {
                                e.Handled = true;
                                return;
                            }                        if (Text.Length == 0)
                            {
                                return;
                            }                        int decimalPlace = Text.IndexOf(e.KeyChar);
                            if (decimalPlace > 0)
                            {
                                e.Handled = true;
                                return;
                            }
                        }                    catch
                        {                    }                    break;                case (char)43:
                    case (char)45:
                        //CASE [ + or - ] 
                        try
                        {
                            if (Text.Length == 0)
                            {
                                return;
                            }                        int plusPlace = Text.IndexOf((char)43);
                            int minusPlace = Text.IndexOf((char)45);                        if (plusPlace >= 0 | minusPlace >= 0)
                            {
                                e.Handled = true;
                                return;
                            }                        if (SelectionStart >= 1)
                            {
                                e.Handled = true;
                                return;
                            }
                        }                    catch
                        {                    }                    break;                default:
                        //CASE [ NUMBER ] 
                        if (DecimalLength == 0)
                        {
                            return;
                        }
                        if (Text.Length == 0)
                        {
                            return;
                        }
                        int dStart = Text.IndexOf((char)46);
                        if (dStart >= 0)
                        {
                            if (SelectionStart <= dStart)
                            {
                                return;
                            }
                            else
                            {
                                int dLen = (Text.Length + 1) - (dStart + 1);
                                if (dLen > _DecimalLength)
                                {
                                    e.Handled = true;
                                    return;
                                }
                            }                    }                    break;            }        }        #endregion        #region  OnPaste Method (Overridable)        //Method of call when Paste it 
            protected virtual void OnPaste(System.EventArgs e)
            {
                string stString = Clipboard.GetDataObject().GetData(System.Windows.Forms.DataFormats.Text).ToString();            if ((stString != null))
                {
                    SelectedText = GetPermitedString(stString, PermitChars);
                }        }        #endregion        #region  [S] HasPermitChars Method        //The value in which it is shown whether it is a permitted character is returned. 
            private static bool HasPermitChars(char chTarget, char[] chPermits)
            {
                foreach (char ch in chPermits)
                {
                    if (chTarget == ch)
                    {
                        return true;
                    }
                }
                return false;        }        #endregion        #region  [S] GetPermitedString Method        //Only the permitted character is connected and returned 
            private static string GetPermitedString(string stTarget, char[] chPermits)
            {
                string stReturn = string.Empty;            foreach (char chTarget in stTarget)
                {
                    if (HasPermitChars(chTarget, chPermits))
                    {
                        return stReturn;
                    }            }            return stReturn;
            }        #endregion
        }}
      

  6.   

    给Textbox添加 KeyPress 事件
    代码如下,即可实现Textbox.text中让输入的信息只能是数字
     private void txtNumber_KeyPress(object sender, KeyPressEventArgs e)
            {
                e.Handled = e.KeyChar<'0'||e.KeyChar>'9';
                if(e.KeyChar==(Char)8)
                {
                    e.Handled = false;
                }        }