动态按钮和创建文本框

时间:2015-11-16 20:50:59

标签: c#

我在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个文本框 请帮助我。

1 个答案:

答案 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);
}

这样,您不仅可以添加新文本框,还可以根据需要随时轻松确定每个按钮创建的文本框。