none
c# winform 获取所有 textbox 控件 RRS feed

答案

  • Public List<TextBox> listTxt=new List<TextBox>();

    Public void FindTxt(Control controls)

    {

         foreach(Control control in controls)

        {

                if(control is TextBox)

               {

                     listTxt.Add(control);

               }

               if(control.Controls.Count>0)

              {

                    FindTxt(control);

              }

        }

    }


    胡超
    2011年4月20日 1:49

全部回复

  • foreach (Control c in this.Controls)
      {
        if (c is TextBox)
        {
          MessageBox.Show(c.Name + " : " + (c as TextBox).Text);
        }
      }
    

    Ellis_Wong
    2011年4月19日 11:38
  • dear
    基本上所有的控件都有Controls属性,下列的写法只能找到Form表单的TextBox
          foreach (Control c in this.Controls)
          {
            if (c is TextBox)
            {
              MessageBox.Show(c.Name + " : " + (c as TextBox).Text);
            }
          }
    


    若是有容器控件,比如像Panel,TabControl...etc
    就必须要在往里面搜寻一次,请参考以下:
     
        private void Form1_Load(object sender, EventArgs e)
        {
          FindControl(this); 
        }
        void FindControl(Control Ctrl)
        {
          foreach (Control c in Ctrl.Controls)
          {
            if (c is Panel)
            {
              FindControl(c);
            }
            else if (c is TabControl)
            {
              FindControl(c);
            }
            else
            {
              FindTextBox(c);
            }
          }
        }
        void FindTextBox(Control Ctrl)
        {
          if (Ctrl is TextBox)
          {
            TextBox t = (TextBox)Ctrl;
            MessageBox.Show(t.Name + " : " + t.Text);
          }
        }
    

    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2011年4月19日 15:37
  • Public List<TextBox> listTxt=new List<TextBox>();

    Public void FindTxt(Control controls)

    {

         foreach(Control control in controls)

        {

                if(control is TextBox)

               {

                     listTxt.Add(control);

               }

               if(control.Controls.Count>0)

              {

                    FindTxt(control);

              }

        }

    }


    胡超
    2011年4月20日 1:49
  • 递归真是个好方法。

    不过你这里为什么不用 c is Container呢?而要分别判断 panel 和 tabcontrol?

    2011年4月20日 3:41
  • dear
    1.不同的控件又有不同的处理方式,不可能一招打死全部,比如TabControl里面又有TabPage,这时又必须要往TagPage里面找
    2.且我不知道Control跟Container他们之间有关系,若可以的话请写个范例让小弟学习
    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2011年4月20日 4:54
  • 在这方面,似乎有一个很经典的面试题:清除窗体中所有的文本框的值。感觉这里面的气氛好活跃。。。
    2011年4月20日 8:07
  • 不好意思,是我没调查清楚。

    我想当然的认为.net winform与java swing结构类似了。逻辑上panel和tabcontrol都应该是一种容器控件,不过在.net中这二位居然都不继承于containercontrol。

    2011年4月20日 12:07