有N个textbox控件,我想让他们都只能输入两位小数的实数,在textbox里输入值过后,值如果满足正则表达式则不做操作,不满足则清空相应的textbox,我想写到一个方法里面,然后所有textbox控件的leave事件都可以调用这个这个方法,不满足就可以清空对应的textbox应该要怎么做?在清空那里卡住了~帮帮忙~散分了
        void 交通金额合计(string txt)//这里txt是调用方法是获取使用该方法的textbox的值
        {
            Regex reg = new Regex("^[0-9]+(.[0-9]{2})?$");//使用正则表达式判断输入的是否为数字
            if (reg.IsMatch(txt))
            {
                //不做操作 
            }
            else
            {
               MessageBox.Show("只能输入两位小数的正实数!");
               //这里需要清空调用这个方法的textbox的值,不知道怎么写了
               return;
            }
        }
例如textbox1里面输入abcd就会报错,然后让他清空textbox1.
        private void textbox1_Leave(object sender, EventArgs e)
        {
            交通金额合计(textbox1.Text);
        }

解决方案 »

  1.   

    ???什么意思?清空?textbox1.Text="";
      

  2.   

    因为调用这个方法的textbox很多
    我不想在每个textbox事件里面都来重复写一次正则表达式验证
    所以才想建一个方法,让每个textbox调用
      

  3.   

    你的意思是,你不知道这个txt是在哪个textbox里输入的,如果发现某textbox传过来的参数txt不符合正则,就清空那个textbox?
      

  4.   

    textbox1.Text = string.Empty;
      

  5.   

      一般情况下如果是在每个textbox里写就应该是这样,但是这样很麻烦,以后要改正则表达式的话要每个textbox事件里面的代码都去修改。
      private void textbox1_Leave(object sender, EventArgs e)
      {
      Regex reg = new Regex("^[0-9]+(.[0-9]{2})?$");//使用正则表达式判断输入的是否为数字
      if (reg.IsMatch(textbox1.text))
      {
      //不做操作  
      }
      else
      {
      MessageBox.Show("只能输入两位小数的正实数!");
      textbox1.text="";
      return;
      }
      }
      

  6.   

    deknight大概就是那个意思,在方法里先判断是哪个textbox调用了他,如果不符合正则表达式就让那个textbox.text="";
      

  7.   

    那就遍历呗 foreach (object mycons in this.form1.Controls)
            {
                if (mycons.GetType().ToString() == "System.From.TextBox")//好象是这样,忘了...
                {
                   TextBox mybox= (TextBox)mycons;
                   mybox.Text = "";
                }
            }
      

  8.   

    wuyazhe见笑了。。没这种功能吗??
      

  9.   

    这样是全清... 如你所说的,清那个特定的textbox,我有点头晕,突然没了头绪
      

  10.   

    算了我还是挨个到每个textbox事件里面去写正则表达式吧
    遍历我也试过的,不行的~
    谢谢大家
      

  11.   

    自定义文本框吧。public class MyTextbox : TextBox
    {
        private Regex regExp = new Regex("");    public string RuleRegex
        {
            get { return regExp.ToString(); }
            set 
            {
                try
                {
                    regExp = new Regex(value);//尝试匹配                        
                }
                catch
                {
                    regExp = new Regex("");
                }
            }
        }    protected override void OnLeave(EventArgs e)
        {
            base.OnLeave(e);
            if (!regExp.IsMatch(this.Text)) this.Text = string.Empty;
        }
    }
    然后编译一次,在工具箱中拖出这个控件在窗体,用这个自定义的正则文本框。
      

  12.   

    用LS的可行,但是你说遍历不行,怎么可能不行?我刚才测试了
    foreach (object mycons in this.Controls)
                {
                    if (mycons.GetType().ToString() == "System.Windows.Forms.TextBox")
                    {
                        TextBox mybox = (TextBox)mycons;
                        mybox.Text = "";
                    }
                }
      

  13.   

    你把当前的对象传进去不就可以了
     void 交通金额合计(object sender)//这里txt是调用方法是获取使用该方法的textbox的值
      {
       TextBox txt=sender as TextBox; 
      Regex reg = new Regex("^[0-9]+(.[0-9]{2})?$");//使用正则表达式判断输入的是否为数字
      if (reg.IsMatch(txt.Text))
      {
      //不做操作  
      }
      else
      {
      MessageBox.Show("只能输入两位小数的正实数!");
      txt.Text="";
      //这里需要清空调用这个方法的textbox的值,不知道怎么写了
      return;
      }
      }  private void textbox1_Leave(object sender, EventArgs e)
      {
      交通金额合计(sender);
      }======================================================
    再说就是检测动作,需要用到服务端么?
      

  14.   

    PaulLeder,你怎么不早来呢。。刚发了分
      

  15.   

    PaulLeder你那方法可以~小弟受益匪浅~这问题困扰我好久,虽然没分了不过很感激你~还有其它帮忙的兄弟