首页 新闻 会员 周边

初学C# winform设计,求教一个方法

0
悬赏园豆:100 [已解决问题] 解决于 2012-05-02 17:04
 1         private void newport_TextChanged(object sender, EventArgs e)
 2         {//需要:不允许以0开头,大于1,小于65535,只能是整数
 3             var reg = @"^\d+$";//正则表达式,整数
 4             bool IsMatch = Regex.IsMatch(newport.Text, reg);
 5             if(!IsMatch)
 6             {
 7 
 8                 string s = newport.Text;
 9                 Regex regex = new Regex(reg);
10                 newport.Text = s.Replace(reg, null);//替换,可以运行,替换不了,求教
11                 
12             }
13             else
14             {
15             }

刚刚学,想做一些免费工具共享出去.比较菜,还请不吝赐教,非常感谢!

问题补充:

正则是想当用户在newport.Text中输入或粘贴"1a123"这样的内容时,把整数以外的字符过滤掉,留下数字,变成1123这样的结果

另外不允许以0开头,大于1小于65535

zge8的主页 zge8 | 初学一级 | 园豆:112
提问于:2012-04-19 16:23
< >
分享
最佳答案
1
        private void newport_TextChanged(object sender, EventArgs e)
        {
            var source = sender as TextBox;
            if (source != null)
            {
                int num;
                if (int.TryParse(source.Text, out num) && num >= 1 && num <=65535)
                {
                    return;
                }
            }
            source.Text = string.Empty;
        }   
收获园豆:100
水牛刀刀 | 大侠五级 |园豆:6350 | 2012-04-19 16:45

你好,可以把数字保留,不要全部清空吗?

zge8 | 园豆:112 (初学一级) | 2012-04-20 20:19
            var source = sender as TextBox;
            if (source != null)
            {
                int num;
                if (int.TryParse(source.Text, out num) && num >= 1 && num <= 65535)
                {
                    return;
                }
            }
            if (string.IsNullOrEmpty(source.Text)) return;
            source.Text = source.Text.Substring(0, source.Text.Length - 1);
            source.SelectionStart = source.Text.Length;

 

@zge8: 

水牛刀刀 | 园豆:6350 (大侠五级) | 2012-04-20 23:11

非常感谢!这个方法简单厉害,测试后就是发现先输入123,再在前面输入了0还是可以以0开头

zge8 | 园豆:112 (初学一级) | 2012-04-20 23:54

@zge8: 

在int num 上面加一句: source.Text = source.Text.TrimStart("0");
水牛刀刀 | 园豆:6350 (大侠五级) | 2012-04-21 13:04

@水牛刀刀: source.Text.TrimStart("0");错误 1 与“string.TrimStart(params char[])”最匹配的重载方法具有一些无效参数

("0")错误 2 参数“1”: 无法从“string”转换为“char

zge8 | 园豆:112 (初学一级) | 2012-04-21 23:13

@zge8: source.Text.TrimStart('0');

水牛刀刀 | 园豆:6350 (大侠五级) | 2012-04-22 17:54
其他回答(7)
0

我以前写的一个限定Int输入的txt控件.你看看有用没!

 1 using System.Text.RegularExpressions;
 2 using System.Windows.Forms;
 3 
 4 namespace H.Control
 5 {
 6     class IntTxt : TextBox
 7     {
 8         public IntTxt()
 9         {
10 
11         }
12 
13         protected override void OnKeyPress(KeyPressEventArgs e)
14         {
15             if (!(e.KeyChar == '\b'))
16             {
17                 if (string.IsNullOrEmpty(this.Text))
18                 {
19                     if (!Regex.IsMatch(e.KeyChar.ToString(), "[1-9]"))
20                     {
21                         e.Handled = true;
22                         return;
23                     }
24                 }
25                 else
26                 {
27                     string num=this.Text+e.KeyChar.ToString();
28                     if (!Regex.IsMatch(num, "^[1-9]*[1-9][0-9]*$"))
29                     {
30                         e.Handled = true;
31                         return;
32                     }
33                 }
34             }
35         }
36     }
37 }
几只蝉 | 园豆:167 (初学一级) | 2012-04-19 16:44

你好,可以把数字保留,不要全部清空吗?

支持(0) 反对(0) zge8 | 园豆:112 (初学一级) | 2012-04-20 20:18

@zge8: 我不知道你试了吗?我重写的这个txt控件,以0开头输入,是没有反应的,而且绝对只能输入数字!

至于范围限定,略作修改就ok!

支持(0) 反对(0) 几只蝉 | 园豆:167 (初学一级) | 2012-04-20 23:10

@vbhyc: 我是直接复制进去的,是不是不行?

支持(0) 反对(0) zge8 | 园豆:112 (初学一级) | 2012-04-20 23:48

@zge8: 你新建个类,再复制进去,注意命名空间,生成下!然后你会在工具栏里,看到这个控件!

支持(0) 反对(0) 几只蝉 | 园豆:167 (初学一级) | 2012-04-21 09:18
0

我这里有一个记事本:Gxnu.edu.cn.Personalnotebook-2010-4-5.rar

类菌体 | 园豆:271 (菜鸟二级) | 2012-04-19 18:07

谢谢,我试试有没有需要的例子,谢谢

支持(0) 反对(0) zge8 | 园豆:112 (初学一级) | 2012-04-20 20:20
0

看你代码,不知道你想干什么。只是告诉你你这边理解有问题。你的方法string.Replace(string oldvar,string newvar) 方法,这个方法的作用是替换指定的内容为新内容,如:

string errString = "This docment uses 3 other docments to docment the docmentation";

string correctString = errString.Replace("docment", "document");

而你这边oldvar其实是个正则,但这个函数会把你的正则表达式解释成字符串,即要替换字符串@"^\d+$";为null,你觉得在你的这里实际上,他替换不?

BLoodMaster | 园豆:135 (初学一级) | 2012-04-20 00:48

谢谢,你说的意思我明白了,但是怎么做才能让它过滤非数字,不是把@"^\d+$"认成是字符串呢?

支持(0) 反对(0) zge8 | 园豆:112 (初学一级) | 2012-04-20 20:20

@zge8: 正则也有replcae方法的。Regex.Replcae,你去msdn下这个方法。很简单很好用的,这边我就不直接给你上代码了

支持(0) 反对(0) BLoodMaster | 园豆:135 (初学一级) | 2012-04-21 11:35
0

不知道你想表达什么。

lonely_rain | 园豆:752 (小虾三级) | 2012-04-20 17:52

那你就在文本框改变事件里,用正则表达示匹配,然后去除字母后重新赋值到文本框中,具体自己实现。

支持(0) 反对(0) lonely_rain | 园豆:752 (小虾三级) | 2012-04-20 21:31

@lonely_rain: 思路我知道,就是不会方法

支持(0) 反对(0) zge8 | 园豆:112 (初学一级) | 2012-04-20 22:09
0
View Code
string inputTxt = "0234fghs34534";//改成你要输入的
            System.Text.StringBuilder sb = new StringBuilder();
            var ch = inputTxt.ToCharArray();
            Regex reg = new Regex(@"^\d+$");
            foreach (var c in ch)
            {
                if (reg.IsMatch(c.ToString()))
                {
                    sb.Append(c);
                }
            }
            int i = 0;//最终结果
            int.TryParse(sb.ToString(), out i);
            if (i > 65535)
            {
                i = 65535;
            }

试试吧.

写代码的疯子 | 园豆:202 (菜鸟二级) | 2012-04-23 13:57
0

[^0]?\d*

中文代码 | 园豆:951 (小虾三级) | 2012-04-24 08:29
0

学习学习

Philomena | 园豆:154 (初学一级) | 2012-04-24 15:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册