说明:
一个panel控件中有很多textbox,textbox中只允许输入数字问题:
怎样遍历textbox验证其输入的合法性?或者有其它的什么好办法?

解决方案 »

  1.   

    第一种:
     
    using system.Linq
     foreach (Control item in this.panel1.Controls.OfType<TextBox>())
                {
                    if(item.Text)//判断是否为数字
                }第二种: /// <summary>
      /// 限制输入数字以外的字符
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void textbox_KeyPress(object sender, KeyPressEventArgs e)
      {
      if (((int)e.KeyChar < 48 || (int)e.KeyChar > 57) && e.KeyChar != 8)
      {
      e.Handled = true;
      }
      }
      

  2.   

    建议你,自定一个textbox,里面写上验证逻辑,界面上所有需要验证的都用这个控件,这样在输入时就可以判断合法性,对你以后维护程序也大有好处
      

  3.   

    如果想通过遍历Panel的子控件,可以如下
    TextBox tb;
    foreach (var ctl in panel1.Controls)
    {
        if (ctl.GetType().ToString() == "System.Windows.Forms.TextBox")
        {
            tb = ctl as TextBox;
            //检核该栏位值是否为数字
            //....
        }
    }另外也可以考虑给每个TextBox加入TextChanged事件来检核值是否为数字
      

  4.   

    在类初始化构造器里面加:
    public login()
            {
                InitializeComponent();            foreach (Control item in this.panel1.Controls)
                {
                    if (item is TextBox)
                    {
                        item.KeyPress += new System.Windows.Forms.KeyPressEventHandler(textbox_KeyPress);
                    }
                }

             }然后在类内加1楼第二种方法的事件private void textbox_KeyPress(object sender, KeyPressEventArgs e)
      {
      if (((int)e.KeyChar < 48 || (int)e.KeyChar > 57) && e.KeyChar != 8)
      {
      e.Handled = true;
      }
      }
      

  5.   


    保存的时候,,
    还有种就是做个用户控件,
    加入这个事件private void textbox_KeyPress(object sender, KeyPressEventArgs e)
      {
      if (((int)e.KeyChar < 48 || (int)e.KeyChar > 57) && e.KeyChar != 8)
      {
      e.Handled = true;
      }
      }
      

  6.   

    我建议还是用正则表达式的好,代码很简洁,
    panel1.controls 这个可以得到panel1中所有的控件的数组.然后你遍历这个数组得到所有的textbox控件,然后获取每个textbox的text用下面这个正则表达式判断就ok了
    Regex regex=new Regex("^[0-9]*$");
    if(regex.isMatch(Textbox.text))
    {
        //这就是存在数字的情况
    }
    你在网上查一下判断数字的正则表达式很多,就两行代码就能判断
      

  7.   

    如果你的开发环境支持system.Linq的话,那么用这个简单些。
    否则的话,版主的方案更合理。
      

  8.   


    补充一问:
    textbox中输入3个数字后焦点自动切换到下一个textbox,如何遍历?
      

  9.   

                bool source = Controls.OfType<TextBox>().Any(t => Regex.IsMatch(t.Text.Trim(), @"^\d+$"));
      

  10.   

    在keydown等键盘事件写代码,判断如果满足条件则下一个textbox获得焦点