当前位置:编程学习 > C#/ASP.NET >>

桌面程序中文本框怎么限制只能输入数字?

我的桌面程序里 希望其中的文本框只能输入数字,请问能不能像web程序里那样,设置正则表达式,如果能设置该怎么设置呢?

我现在的方法是:
  private void textBox3_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((e.KeyChar < '0' || e.KeyChar > '9') && e.KeyChar != (char)13 && e.KeyChar != (char)8)
            {
                e.Handled = true;
            }
        }
但是发现,在半角状态下是正常的,在全角状态下不能输入任何字符了,请问哪位高手知道这是怎么回事,能不能解决呢?
谢谢先 ! --------------------编程问答-------------------- try{int i=Convert.toInt32(textBox1.Text.Trim());}
catch(Exception e)
{
 MessageBox.show("输入的不是数字!");
 textbox1.Text="";
} --------------------编程问答-------------------- using System.Runtime.InteropServices;

[DllImport("User32.dll")]
static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
[DllImport("User32.dll")]
static extern int GetWindowLong(IntPtr hWnd, int nIndex);
public const int GWL_STYLE = -16;
public const int ES_NUMBER = 0x2000;
private void Form1_Load(object sender, EventArgs e)
{
    SetWindowLong(textBox1.Handle, GWL_STYLE,
        GetWindowLong(textBox1.Handle, GWL_STYLE) | ES_NUMBER);
} --------------------编程问答-------------------- private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    e.Handled = ("0123456789" + (char)8 + (char)13).IndexOf(e.KeyChar) < 0;
}

这样现在不了粘贴
除非在TextChange事件中再处理一下 --------------------编程问答-------------------- 限制 --------------------编程问答-------------------- 可以用LS的方法过滤... --------------------编程问答-------------------- private void text1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((short)e.KeyChar >= 48 && (short)e.KeyChar <= 57 || (short)e.KeyChar == 8)
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        } --------------------编程问答-------------------- 晕,没那么复杂吧,
两个简单的方法:
1:使用EditeMask空间,设置为只能输入数字
2:用char.IsNumber()函数来判读输入的每个字符是不是数字就行了。
 
OK! --------------------编程问答-------------------- 楼主的意思是全角状态下的数字也允许输入?如果是,这样试下

private void textBox1_TextChanged(object sender, EventArgs e)
{
     textBox1.Text = Regex.Replace(textBox1.Text, @"[^0-90-9]", "");
}

否则这样试下

private void textBox1_TextChanged(object sender, EventArgs e)
{
     textBox1.Text = Regex.Replace(textBox1.Text, @"[^0-9]", "");
} --------------------编程问答-------------------- 好像楼上的最确切了,最近刚看正则表达式 --------------------编程问答-------------------- lxcnn(过客) ( ) 信誉:100    Blog   加为好友 

你写的那一个是不是要引用别的类
我试的好像不行啊

asp我知道可以 winform真的可以吗 --------------------编程问答-------------------- mark --------------------编程问答-------------------- 可以用正则表达式控制

using System.Text.RegularExpressions;

private void button1_Click(object sender, System.EventArgs e)
{
   string regstr = @"^-?\d+$";//整数,包括全角
   Regex regex = new Regex(regstr);
   string text = textBox1.Text;
   if (regex.IsMatch(text))
   {
MessageBox.Show("ok");
   }
   else
   {
MessageBox.Show("only can input number");
   }
} --------------------编程问答-------------------- TO:yudi010

textBox1.Text = System.Text.RegularExpressions.Regex.Replace(textBox1.Text, @"[^0-90-9]", "");

PS:事实上,这样做代码比较简洁,也能达到效果,但效率不高 --------------------编程问答-------------------- 方法 1。try{int i=Convert.toInt32(textBox1.Text.Trim());}
     catch(Exception e)
     {
        MessageBox.show("输入的不是数字!");
        textbox1.Text="";
     }
方法2。

    用正则表达式
--------------------编程问答-------------------- lxcnn(过客) ( ) 信誉:100    Blog   加为好友 
ok
多谢了 哈
不过有一个缺点,就是输入错误的焦点在顶部 --------------------编程问答-------------------- TO:yudi010

那就在后面再加一行
textBox1.SelectionStart = textBox1.Text.Length;

这个是指定到尾部,当然,如果是在中间插入的话,还是有缺点,虽然也可以做到,但是没那个必要的
--------------------编程问答-------------------- TO lxcnn(过客)
明白了 谢谢了
看来自己的基础真的很差 哈哈 --------------------编程问答-------------------- 自己写个textBox控件,加个属性
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace OperateSQL
{
    class MyTextBox:TextBox
    {
        private bool _isNum = false;

        public bool IsNum
        {
            get { return _isNum; }
            set { _isNum = value; }
        }

        protected override void OnKeyPress(KeyPressEventArgs e)
        {
            if (_isNum)
            {
                if (e.KeyChar < '0' || e.KeyChar > '9')
                {
                    e.Handled = true;
                }
                else
                {
                    base.OnKeyPress(e);
                }
            }
        }
    }
}

用的时候把IsNum属性设为true就行了 --------------------编程问答-------------------- 谁能告诉我,这些怎么用啊。
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,