这与文本框数组和int数组有关。不知何故,数组的值似乎在main方法中有效,但在其他方法中却没有。
因此,从第34行到第44行,我将值分配给main中的数组,然后从第48行到第56行,我使用for循环来使其在键入文本框时只允许某些键。然后在第64到70行的另一种方法中,我尝试使用另一个for循环来制作一个""字符串值等于0,或以其他方式获取文本框中的值,并将该值设置为numbers []数组中的变量。这似乎不起作用。更改文本框中的值似乎不会更改数字[]数组的值。但是,如果我输入它,它确实有效,就像我从第71行到第94行所做的那样。我不想采取简单的方法,只需输入它,我想知道为什么这个循环不是'工作,这样我可以了解更多有关数组和方法的知识,所以我知道将来如何解决类似的问题。
为方便起见:
public Form1()
{
InitializeComponent();
inputs[0] = textBox1;
inputs[1] = textBox2;
inputs[2] = textBox3;
inputs[3] = textBox4;
inputs[4] = textBox5;
numbers[0] = oneYear;
numbers[1] = twoYear;
numbers[2] = threeYear;
numbers[3] = fourYear;
numbers[4] = moreYear;
textBox6.ReadOnly = true;
for (int i = 0; i <= 4; i++)
{
inputs[i].KeyDown += (obj, args) =>
{
Keys[] allowedKeys = { Keys.Back, Keys.Next, Keys.Delete, Keys.Left, Keys.Right };
args.SuppressKeyPress = !allowedKeys.Contains(args.KeyCode) && (args.KeyValue < 48 || args.KeyValue > 57);
};
inputs[i].Text = 0.ToString();
}
}
private void autobots()
{
try
{
//find out why this doesn't work
for (int i = 0; i <= 4; i++)
{
if (inputs[i].Text == "")
numbers[i] = 0;
else
numbers[i] = Convert.ToInt32(inputs[i].Text);
}
/*if (textBox1.Text == "")
oneYear = 0;
else
oneYear = Convert.ToInt32(textBox1.Text);
if (textBox2.Text == "")
twoYear = 0;
else
twoYear = Convert.ToInt32(textBox2.Text);
if (textBox3.Text == "")
threeYear = 0;
else
threeYear = Convert.ToInt32(textBox3.Text);
if (textBox4.Text == "")
fourYear = 0;
else
fourYear = Convert.ToInt32(textBox4.Text);
if (textBox5.Text == "")
moreYear = 0;
else
moreYear = Convert.ToInt32(textBox5.Text);*/
oneTotal = oneYear * 24;
twoTotal = twoYear * 27;
threeTotal = threeYear * 30;
fourTotal = fourYear * 33;
moreTotal = moreYear * 36;
total = oneTotal + twoTotal + threeTotal + fourTotal + moreTotal;
textBox6.Text = total.ToString();
//label6.Text = ("$") + total.ToString();
}
catch
{
textBox6.Text = "";
//label6.Text = "";
}
}
答案 0 :(得分:0)
你的for循环工作正常....但是,为了解释为什么这不能按你需要的方式工作:
numbers[0] = oneYear;
numbers[1] = twoYear;
numbers[2] = threeYear;
numbers[3] = fourYear;
numbers[4] = moreYear;
执行此操作时,您将变量的值存储到数组中...而不是变量本身。
for (int i = 0; i <= 4; i++)
{
if (inputs[i].Text == "" || inputs[i] == null)
numbers[i] = 0;
else
在这里设置数字数组的i位置的值。到文本框中的值是什么。这不会改变变量的值(“oneYear”,“twoYear”等等。)
numbers[i] = Convert.ToInt32(inputs[i].Text);
}
但是你在这里使用的是变量(即“oneYear”,“twoYear”) 有一个存储在其中的新值。请记住,numbers []数组不会直接影响这些变量 numbers []数组(因为它是int类型的数组)只存储这些变量的值而不是对变量本身的引用。因此,此处的代码不能满足您的要求。
oneTotal = oneYear * 24;
twoTotal = twoYear * 27;
threeTotal = threeYear * 30;
fourTotal = fourYear * 33;
moreTotal = moreYear * 36;
total = oneTotal + twoTotal + threeTotal + fourTotal + moreTotal;
textBox6.Text = total.ToString();
为了使此代码正常工作,您需要使用numbers []数组中的值。像这样:
oneTotal = numbers[0] * 24;
twoTotal = numbers[1] * 27;
threeTotal = numbers[2] * 30;
etc...
执行此操作时,它会将正确的结果输出到textBox6。
我粘贴的第一部分代码仅在oneYear,twoYear,threeYear,fourYear,moreYear变量具有非零默认值或者在获得此代码之前设置了值并且因为您正在使用时才有用除非使用numbers []数组值,否则numbers []数组用于存储文本框中的值,您将看不到要查看的计算。或者,如果您已经设置使用oneYear,则两年......变量只使用您已注释掉的if-else语句,或者放置:
oneYear = numbers [0]; twoYear =数字[1]; 等。
稍微澄清一下:
我认为你可能在这里有点困惑的原因是因为你使用了两种不同类型的数组。用于存储文本框的TextBox数组,以及用于在文本框中存储值的int数组。 TextBox数组存储对象...或对象的引用(指针)。所以当你说输入[0] = textBox1;你告诉程序将textBox1的引用存储在inputs []数组的第一个元素中,允许你直接操作存储在这个数组中的textBox,但是因为int类型是存储在数组中的主数据类型只保存其值,而不是变量本身。
最后一件事: 您需要为int变量创建/使用包装类,以便按照您尝试的方式执行尝试。