动态文本框并使用它们

时间:2017-08-06 09:05:49

标签: c# dynamic textbox

我已经生成了一些文本框,我希望用户在添加到表单后输入数据,然后我将其中的数据用于某些计算。 我该如何使用这些数据?

TextBox t3 = new TextBox();

t3.Top = 222 + ((addalternativebutton - 3) * 60);
t3.Left = 214;
t3.Width = 76;
t3.Height = 22;
t3.Name = "txtwaste" + addalternativebutton.ToString();

this.tabore.Controls.Add(t3);
ww[addalternativebutton] = Convert.ToDouble(t3.Text);

1 个答案:

答案 0 :(得分:0)

正如我在评论中提到的,您需要保留动态创建的文本框实例。您可以使用通用字典,如果您需要处理分配给它们的名称,或者您可以使用通用列表。 以下解决方案我为您提供了使用通用列表。

首先需要的是一个保留文本框的列表。

public partial class Form1 : Form
{
    private List<TextBox> textBoxes;
    private int textBoxCount; //This is used to provide unique names to the 
                              //textboxes and to track the number of dynamic textboxes.

    public Form2()
    {
        InitializeComponent();
    }
}

现在,在按钮的单击事件中,文本框被创建,定位并添加到列表以及Form.Controls。

private void button1_Click(object sender, EventArgs e)
{
    textBoxCount += 1;
    TextBox t3 = new TextBox();
    t3.Top = 20 + (22 * textBoxCount); //You can put your own logic to set the Top of textbox.
    t3.Left = 120;
    t3.Width = 50;
    t3.Height = 20;
    t3.Name = "txtwaste" + textBoxCount; //You can use your own logic of creating new name.
    this.Controls.Add(t3);
    this.textBoxes.Add(t3);
}

现在,当您想要点击另一个按钮计算所有文本框的值之和时。

private void button2_Click(object sender, EventArgs e)
{
    double totalValue = 0;
    foreach (var textBox in textBoxes)
    {
        double currentValue;
        if (double.TryParse(textBox.Text, out currentValue))
        {
            totalValue += currentValue;
        }
    }
    // Displaying totalValue in a label.
    lblTotalValue.Text = "Total Value : " + totalValue;
}

这可以帮助您解决问题。