我动态添加了两组控件数组
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重复的错误?

解决方案 »

  1.   

                ((TextBox)sender).Text = txt1[i].Text;
    第二个问题我也发现,但是没研究。
      

  2.   

    你需要一个textbox在数组中的索引,你可以在创建textbox时,设置textbox的tag属性为iprivate void txt2_Click(object sender, EventArgs e)

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

  3.   


    谢谢了,版主能帮我测试下么,我这里只有点击最后一个txt2时=txt1的值,点前面的几个都是报错未实例化,我发现就最后一个txt1输入值有效,前面的txt1无论输入什么都是NULL值!!
      

  4.   

    TextBox[] txt1 = new TextBox[i]
    TextBox[] txt2 = new TextBox[i]可以将txt1 txt2的tag设成下标 或者name后跟下标
    事件中再取出tag 或者取出name trim掉前面的名字
    转成数字就是下标了name属性本来就是个属性 是可以重复的
    设计器不能重复
    是因为 你改了Name属性
    txt1或者txt2这个变量名就变成name的名字了
      

  5.   

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