日期:2014-05-17  浏览次数:20919 次

[请求帮助!!]有关控件数组的问题
我动态添加了两组控件数组
TextBox[] txt1 = new TextBox[i]
TextBox[] txt2 = new TextBox[i]
i是根据用户选着设定的大小
控件数组txt2添加了事件txt2[i].Click += new EventHandler(txt2_Click)

private void txt2_Click(object sender, EventArgs e)

//这里的事件我想实现txt2[i].text = txt1[i].text


请问以上事件应该怎么写?
另外我发现动态添加数组的时候所有控件name属性设置为一样为什么不会发生name重复的错误?
------最佳解决方案--------------------
你需要一个textbox在数组中的索引,你可以在创建textbox时,设置textbox的tag属性为i

private void txt2_Click(object sender, EventArgs e)

txt2[Convert.ToInt32((sender as TextBox).Tag)].text = txt1[Convert.ToInt32((sender as TextBox).Tag)].text

------其他解决方案--------------------
TextBox[] txt1 = new TextBox[i]
TextBox[] txt2 = new TextBox[i]

可以将txt1 txt2的tag设成下标 或者name后跟下标
事件中再取出tag 或者取出name trim掉前面的名字
转成数字就是下标了

name属性本来就是个属性 是可以重复的
设计器不能重复
是因为 你改了Name属性
txt1或者txt2这个变量名就变成name的名字了
------其他解决方案--------------------
第一个问题不知道你什么需求

回答第二个问题,如果你做过Design-Time的东西的话就能理解,在vs里面创建控件,或者改名,等等设计行为都依托于一个host,在更改控件名称的时候会进行名称唯一性检查,而直接创建的控件并不会做这样的操作。同样的,在code behind文件中(xxxx.Designer.cs),直接更改名称也不会报错。因为是通过code的方式,而不是Design的方式进行的。
------其他解决方案--------------------


            ((TextBox)sender).Text = txt1[i].Text;

第二个问题我也发现,但是没研究。
------其他解决方案--------------------
引用:
C# code?12            ((TextBox)sender).Text = txt1[i].Text;
第二个问题我也发现,但是没研究。


这样不对,关键是事件过程中的i从那里来的??
------其他解决方案--------------------
引用:
你需要一个textbox在数组中的索引,你可以在创建textbox时,设置textbox的tag属性为i

private void txt2_Click(object sender, EventArgs e)

txt2[Convert.ToInt32((sender as TextBox).Tag)].text = txt1[Convert.ToInt32(……


谢谢了,版主能帮我测试下么,我这里只有点击最后一个txt2时=txt1的值,点前面的几个都是报错未实例化,我发现就最后一个txt1输入值有效,前面的txt1无论输入什么都是NULL值!!
------其他解决方案--------------------
引用:
引用:C# code?12            ((TextBox)sender).Text = txt1[i].Text;
第二个问题我也发现,但是没研究。

这样不对,关键是事件过程中的i从那里来的??

好吧,我以为你是语法问题。这个问题版主给你很好的解决了~
------其他解决方案--------------------
自己顶一下  求大神指点啊!!!!