你可以动态给文本框起名,比如 txt1,txt2,txt3.。。
按箭头时,递增后面的数组,然后controls["txt"+i.ToString]找到下一个
或者创建下一个时,将上一个txt的tag保存为新创建的这个txt,这样通过访问tag就可以访问下一个
当然你还可以自定义text,里面可以有next,prior等属性,实现链表

解决方案 »

  1.   

    先建立个textbox[ ]数组,生成一堆textbox,然后循环把他们放到panel里
    循环给它们挂上相同的keydown事件
    事件里做判断,判断当前的索引,是否是第一个或最后一个,然后就上一个.focus,下一个.focus呗,其实没多难
      

  2.   

    就是用控件数组,用代码来设置布局。可以使用List<T>
    可以用indexof来判断当前是第几个控件
      

  3.   

    动态的就可以了TextBox[] tbs=new TextBox[100]
    分别设置tabindex,还要处理上,下键
      

  4.   

    如果需要一个一个加上去,还能一个一个删除,当然是List<TextBox>更好了
    如果仅仅是固定生成多少个,数组就足够了.
      

  5.   


            TextBox[] txt = new TextBox[100];
            private void button3_Click(object sender, EventArgs e)
            {
                for (int i = 0; i < txt.Length; i++)
                {
                    txt[i] = new TextBox();
                    txt[i].Left = 10;
                    txt[i].Top = 10 + 35 * i;
                    txt[i].Width = 90;
                    txt[i].Height = 30;
                    txt[i].Name = "txt" + i.ToString();
                    txt[i].KeyDown += MyKeyDown;
                    this.Controls.Add(txt[i]);
                }
            }        void MyKeyDown(object sender, KeyEventArgs e)
            {
                int index = int.Parse(Regex.Match((sender as TextBox).Name, @"\d+").Value);
                if (e.KeyValue == 40)
                {
                    if (index == txt.Length - 1)
                    {
                        index = 0;
                    }
                    else
                    {
                        index++;
                    }
                }
                else if (e.KeyValue == 38)
                {
                    if (index == 0)
                    {
                        index = txt.Length - 1;
                    }
                    else
                    {
                        index--;
                    }
                }
                txt[index].Focus();
            }
      

  6.   

    你可以取到每一个 TextBox 的 location(x、y坐标),然后加上高度(h)和宽度(w),可以知道 TextBox 的底边和右边。如果判断一个 TextBox 的“右边”是什么 TextBox,那么选择
          x2>=x1+w1 && y2<=y1+h1 && y2+h2>=x1
    的 TextBox,并且 abs(x2- x1-w1) 最小的(最近的),然后设置它为焦点。先择下边或者上边也是一样。不要用什么List或者Tag来设置。因为你设置不过来,在你用鼠标拖动TextBox的时候,不可能手工改动那个数据。
      

  7.   


    我觉得这个肯定会有一个数量限制的,比如不会超过100个,这样的话,你可以直接开始就搞100个textbox,用的时候再show出来
      

  8.   

    就你的需求,用datagridview更好。
      

  9.   

    觉得还好,写个类,继承自textbox,给他一个public的int,当做是textbox组的索引
    建立textbox的数组,别用循环了,每次切换焦点的时候,获取当前焦点textbox的索引,然后索引+1就是下一个的,当然了,如果到了数组上限,索引归0(从0开始的索引)
    根据索引在textbox的数组中找textbox对了,你还得自己写个panel,继承自panel,这个panel加一个public的item属性,类型为textbox,并且做一个add函数,add一次就给panel.controls里面加一个textbox,这些textbox的dock就设置为top好了,这样就行了如果数量太大了,比如你说的100个,我是真不建议用textbox对象了,gdi+画一个textbox都比用实际的textbox强,至少不卡
      

  10.   

    拦截键盘消息,controls.addcontriol(new textbox())
      

  11.   

    [color=#FF0000]当焦点在第一个文本框的时候,如果客户按下↓,则,将光标转移至第个文本框,依次类推。
    当焦点在第一个文本框的时候,如果客户按下↓,则,将光标转移至第[/color]个文本框;如果客户按下↑的时候,光标则移至第一个文本框,依次类推。
    到底是第几个哦。
      

  12.   

    如果仅仅是文本控件,可能用gridview更好做一些,如果还有其他的一些东西,例如label之类的,可以自己设计一个控件来包含这些,然后就无限循环使用吧……
      

  13.   

    ...你的文本控件是放到一个容器中(比如panel)的吧,容器本身就有控件的结合:容器.Controls,Controls里面的索引是按照控件的创建顺序,
    解决方案:1.用一个全局变量记录当前焦点索引focusIndex,默认0
                      2.按上直接就是:   容器.Controls[focusIndex-1].Focus();  ,当然要判断索引的位置哦,即focusIndex-1不能小于0,按下不用我写了吧
      

  14.   

    捕获到这两个键直接SendKey一个tab或shift+tab就好。。如果控件默认顺序不对,就要通过TabIndex或SetChildIndex设置下跳转顺序