每次点击按钮我都需要创建一个新的文本框。我知道它将如何工作一次,但不是多次。
TextBox NewTB = new TextBox();
NewTB...// set textbox properties
this.Controls.Add(NewTB);
每次单击按钮(NewTB1,NewTB2等)时,我都需要NewTB
不同,我尝试了包含我想要的名称的List<>
,然后将名称指定为{{1成员,但那不起作用。我可以使用某种包含TextBoxes的List<>
吗?我真的不确定如何实现它。
答案 0 :(得分:1)
如果你想保持引用文本框的能力,你需要一个列表(这将使你能够创建无限数量的列表),然后在列表中添加对新文本框的引用时间你向控件添加相同的引用。每次单击该按钮时,都应将文本框设置为文本框的新实例,然后将该实例的引用添加到控件和列表中。
实施例: 制作TextBoxen:
boolean iNeedMoreTextBoxes = true; //A simple boolean to be changed when you want
//want to stop adding TextBoxes
List<TextBox> textBoxes = new List<TextBox>(); //This makes a list of TextBoxes
TextBox tb = new TextBox(); //tb is nothing more than a pointer to the new TextBox
while(iNeedMoreTextBoxes){
textBoxes.add(tb); //The pointer is added to the List
control.add(tb); //The same pointer is added to the control
tb = new TextBox(); //Make another TextBox
iNeedMoreTextBoxes = checkToSeeIfINeedMoreTextBoxes();
}
好的,那样做的是制作一堆对象,并将每个对象的引用提供给List和控件。现在,每当您使用List的引用来更改对象时,控件也会更改,因为它具有对同一对象的引用。从而, 要检索TextBoxen:
for(int i = 0; i < testBoxes.length(); i++){
textBoxes.get(i).makeChanges(); //makeChanges isn't really a function, just an example
}
现在,如果您需要能够对一个特定的TextBox进行更改,TextBox类必须有一些标识字段,然后您可能会使用它:
int id = getTheIDofTheTextBoxINeed(); //this can be any identifier that you can check
for(int i = 0; i < testBoxes.length(); i++){
if(textBoxes.get(i).getID() == id) //Yay we found the right one, now make the changes
textBoxes.get(i).makeChanges();
}
这或多或少都是你做的。
编辑:这是java代码,因为我对C#不太熟悉。但是,我知道基本原则适用于两种语言,只是一些语法不同。答案 1 :(得分:1)
示例中的名称“NewTB”只是一个变量名称。它没有以任何方式分配给该文本框。文本框的“列表”驻留在控件结构中。换句话说,当您说this.Controls.Add(NewTB)
时,您将该文本框添加到控件列表中。
如果您向我们展示的代码作为点击处理程序的一部分发生,则每次单击该按钮时都会运行该代码,因此每次都会添加一个新的文本框。 this.Controls
本质上是用于跟踪表单上控件(包括文本框)的列表。