none
如何遍历有规律名字的控件 RRS feed

  • 问题

  • 比如说lable1 label2
    可不可以用
    for(……i……)
    {
    lable(i)
    }
    这样的形式来遍历呢?
    或者有什么好的办法来遍历的……

    我想实现
    string[]  str = {"name1","name2","name3"……}
    label(i).Text = str[i];
    这样的功能。。。

    还是说我自己定好tab的顺序,然后用foreach呢?只能这样么?
    那命名的规律是不是就没什么意义了呢?
    2009年7月17日 9:24

答案

  • 你好,

    for (int i = 0; i < length i++)
    {
       FindControl("name"+i)
    }
    jon.valett@gmail.com
    2009年7月17日 12:42
    版主
  • 你好!
         一般来说这样来命名没有什么实际的意义,不会给遍历带来什么好处,想遍历还需要自己建立某种关联(如使用Dictionary或Hashtable等),只会增加额外的工作量!
         还是把控件命名成有实际意义的名字比较好,这样来增加代码的可读性!
    周雪峰
    2009年7月17日 12:44
    版主
  • 如果要对某一些控件做一些相似的处理,那么最好使用一个单独的集合来记录要处理的控件,而不是通过控件名称的某些关联性。
    2009年7月18日 3:19

全部回复

  • 您好,请参考:
                foreach (Control item in this.Controls)
                {
                    if (item is Label)
                    {
                        Label m_Label = (Label)item;
                        ......
                    }
                }
    至于您想实现的功能,可以修改str,例如:
    string[]  str = {"key1:name1","key2:name2","Key3:name3"……}
    Winform在key中放Label的name, WebForm在Label放ID
    这样就可以在上面的遍历中用 m_Label.name的属性来判断。

    也可以将str设计为一个带键值对的集合,例如Dictionary<Tkey, TValue>。会更方便一些
    2009年7月17日 11:42
  • 你好,

    for (int i = 0; i < length i++)
    {
       FindControl("name"+i)
    }
    jon.valett@gmail.com
    2009年7月17日 12:42
    版主
  • 你好!
         一般来说这样来命名没有什么实际的意义,不会给遍历带来什么好处,想遍历还需要自己建立某种关联(如使用Dictionary或Hashtable等),只会增加额外的工作量!
         还是把控件命名成有实际意义的名字比较好,这样来增加代码的可读性!
    周雪峰
    2009年7月17日 12:44
    版主
  • 如果要对某一些控件做一些相似的处理,那么最好使用一个单独的集合来记录要处理的控件,而不是通过控件名称的某些关联性。
    2009年7月18日 3:19