我在c#表格上有一个文本框和按钮,用户可以输入数字。我创建一个用户想要的标签,每个标签都有一个按钮。如果我点击那些按钮,我想创建文本框,但如果用户继续点击,我想要创建更多文本框。
Button[] Btn= new Button[10];
for (int i = 0; i < labelNumber; i++)
{
Btn[i] = new Button();
Btn[i].Text = "Add";
Btn[i].Location = new Point(40, 100 + i * 29);
Btn[i].Size = new Size(50,20);
this.Controls.Add(Btn[i]);
Btn[i].Click += new EventHandler(addNewTextbox);
}
上面的代码;例如; if labelNumber == 3
所以我有3个标签和3个按钮,如果我点击添加按钮我想在这个标签附近创建文本框。
private void addNewTextbox(object sender, EventArgs e)
{
TextBox[] dynamicTextbox = new TextBox[10];
Button dinamikButon = (sender as Button);
int yLocation = (dinamikButon.Location.Y - 100) / 29;
//int xLocation = dinamikButon.Location.X - 100;
dynamicTextbox[yLocation] = new TextBox();
dynamicTextbox[yLocation].Location = new Point(100, 100 + yLocation * 29);
dynamicTextbox[yLocation].Size = new Size(40, 50);
this.Controls.Add(dynamicTextbox[yLocation]);
}
这里我更改了文本框y坐标,但我不能用X.如果我改变了这个
dynamicTextbox[yLocation].Location = new Point(100*x, 100 + yLocation * 29);
x++;
它排序等于所有这些。
Label1 Button1
Label2 Button2
Label3 Button3
如果我点击Button1
4次,则必须在label1
旁边创建4个文本框。如果我点击Button2
2次,则必须在label2
旁边创建2个文本框
请帮助我。
答案 0 :(得分:1)
最简单的方法是将包含已创建文本框的列表保存在按钮的Tag
属性中,如下所示
private void addNewTextbox(object sender, EventArgs e)
{
var button = (Button)sender;
var textBoxes = button.Tag as List<TextBox>;
if (textBoxes == null)
button.Tag = textBoxes = new List<TextBox>();
var textBox = new TextBox();
textBoxes.Add(textBox);
textBox.Location = new Point(100 * textBoxes.Count, button.Top);
textbox.Size = new Size(40, 50);
this.Controls.Add(textBox);
}
这样,您不仅可以添加新文本框,还可以根据需要随时轻松确定每个按钮创建的文本框。