你可以动态给文本框起名,比如 txt1,txt2,txt3.。。
按箭头时,递增后面的数组,然后controls["txt"+i.ToString]找到下一个
或者创建下一个时,将上一个txt的tag保存为新创建的这个txt,这样通过访问tag就可以访问下一个
当然你还可以自定义text,里面可以有next,prior等属性,实现链表
按箭头时,递增后面的数组,然后controls["txt"+i.ToString]找到下一个
或者创建下一个时,将上一个txt的tag保存为新创建的这个txt,这样通过访问tag就可以访问下一个
当然你还可以自定义text,里面可以有next,prior等属性,实现链表
循环给它们挂上相同的keydown事件
事件里做判断,判断当前的索引,是否是第一个或最后一个,然后就上一个.focus,下一个.focus呗,其实没多难
可以用indexof来判断当前是第几个控件
分别设置tabindex,还要处理上,下键
如果仅仅是固定生成多少个,数组就足够了.
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();
}
x2>=x1+w1 && y2<=y1+h1 && y2+h2>=x1
的 TextBox,并且 abs(x2- x1-w1) 最小的(最近的),然后设置它为焦点。先择下边或者上边也是一样。不要用什么List或者Tag来设置。因为你设置不过来,在你用鼠标拖动TextBox的时候,不可能手工改动那个数据。
我觉得这个肯定会有一个数量限制的,比如不会超过100个,这样的话,你可以直接开始就搞100个textbox,用的时候再show出来
建立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强,至少不卡
当焦点在第一个文本框的时候,如果客户按下↓,则,将光标转移至第[/color]三个文本框;如果客户按下↑的时候,光标则移至第一个文本框,依次类推。
到底是第几个哦。
解决方案:1.用一个全局变量记录当前焦点索引focusIndex,默认0
2.按上直接就是: 容器.Controls[focusIndex-1].Focus(); ,当然要判断索引的位置哦,即focusIndex-1不能小于0,按下不用我写了吧