如何从文本框数组中检索输入的文本?

时间:2014-12-29 09:03:38

标签: c# arrays input textbox

我正在创建一个计算器,用户在文本框中输入一个数字,指定用户想要的输入(文本框)数量(代码未显示)。我使用了一个文本框数组来创建这些文本框。当我想从这些文本框中获取文本来执行计算时出现问题,到目前为止我为此编写的代码如下所示:

int n;
TextBox[] textBoxes;
Label[] labels;
double[] values;

public void GetValue()
{
    n = Convert.ToInt16(txtInputFields.Text);
    values = new double[n];
    textBoxes = new TextBox[n];

    for (int i = 0; i < n; i++)
    {

    }
}

我不确定在for循环中放入什么内容;我尝试过以下方法:

 values[n] = Convert.toDouble(textBoxes[n].Text);

但它给了我错误:索引超出了数组的范围。

我是C#的新手并且一般编程所以任何帮助都会非常感激。 感谢。

编辑:此处显示了创建文本框的代码:

public void InstantiateTextFields()
    {
        n = Convert.ToInt16(txtInputFields.Text);
        int posLeft = 100;
        textBoxes = new TextBox[n];
        labels = new Label[n];

        // Creates number of inputs and labels as specified in txtInputFields (n).
        for (int i = 0; i < n; i++)
        {
            textBoxes[i] = new TextBox();
            textBoxes[i].Top = 100 + (i * 30);
            textBoxes[i].Left = posLeft;
            textBoxes[i].Name = "txtInput" + (i + 1);


            labels[i] = new Label();
            labels[i].Top = 100 + (i * 30);
            labels[i].Left = posLeft - 50;
            labels[i].Text = "Input " + (i + 1);
            labels[i].Name = "lblInput" + (i + 1);

        }

        for (int i = 0; i < n; i++)
        {
            this.Controls.Add(textBoxes[i]);
            this.Controls.Add(labels[i]);
        }
    }

2 个答案:

答案 0 :(得分:1)

values [n] = Convert.toDouble(textBoxes [n] .Text);给出错误,因为n在数组之外。您分配一个大小为n的数组,该数组为零索引,也就是最后一个元素位于位置n-1。

for (int i = 0; i < n; i++)
{
    values[i] = Convert.toDouble(textBoxes[i].Text);
}

答案 1 :(得分:1)

GetValue方法中的代码会重新创建文本框数组,这样做会破坏原始内容(动态创建的文本框InstantiateTextFields)。 这样,你的循环失败了Object Reference not set

您只需使用全局变量而无需重新初始化

public void GetValue()
{
    n = Convert.ToInt16(txtInputFields.Text);
    values = new double[n];

    // textBoxes = new TextBox[n];

    for (int i = 0; i < n; i++)
    {
       values[i] = Convert.ToDouble(textBoxes[i].Text);

    }
}

有一些关于阅读输入文本并将其转换为双重而无需检查的内容。如果您的用户键入了无法转换为double的内容,则代码将在Convert.ToDouble行中崩溃。改为使用

double temp;
for (int i = 0; i < n; i++)
{
   if(double.TryParse(textBoxes[i].Text, out temp)
       values[i] = temp;
   else
   {
       // Not a double value....
       // A message to your user ?
       // fill the array with 0 ?
       // Your choice....
   }
}