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