将文本框中的数字存储到C#中的数组中

时间:2014-04-14 02:11:31

标签: c# .net arrays

我有18个文本框,它们被分为9个数字 - 9个百分比。 数字数组是g []百分比数组是w []。

所以我想要做的是,我想将数字存储在9个文本框(textbox1,textbox2,..... textbox9)中,数字g [],另外9个存储到数组瓦特[]。 数组g []和w []的初始值都为零。

 int[] g = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
 int[] w = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 };

每个文本框编号对应一个数组索引,例如:

textbox2 - g[1]
textbox10 - w[0]

因此,如果要输入textbox1中只有10和textbox10输入为30,那么它应该是这样的。

int[] g = new int[] { 10, 0, 0, 0, 0, 0, 0, 0, 0 };
int[] w = new int[] { 30, 0, 0, 0, 0, 0, 0, 0, 0 };

重要的是,textbox4可能没有值输入,因此该值应保持为0.

使用最少量的代码和变量声明来实现此目的的最佳方法是什么?

编辑:这是我到目前为止所尝试的但是它似乎不是一个好方法来做到这一点+我收到错误

  

无法将类型为“System.Windows.Forms.TextBox”的对象强制转换为类型   'System.IConvertible'

   private void button1_Click(object sender, EventArgs e)
    {
        int[] g = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
        int[] w = new int[] { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
        List<TextBox> gList = new List<TextBox>();
        gList.Add(new TextBox { Text = textBox1.Text });
        gList.Add(new TextBox { Text = textBox2.Text });
        gList.Add(new TextBox { Text = textBox3.Text });
        gList.Add(new TextBox { Text = textBox4.Text });
        gList.Add(new TextBox { Text = textBox5.Text });
        gList.Add(new TextBox { Text = textBox6.Text });
        gList.Add(new TextBox { Text = textBox7.Text });
        gList.Add(new TextBox { Text = textBox8.Text });
        gList.Add(new TextBox { Text = textBox9.Text });

        List<TextBox> wList = new List<TextBox>();
        wList.Add(new TextBox { Text = textBox10.Text });
        wList.Add(new TextBox { Text = textBox11.Text });
        wList.Add(new TextBox { Text = textBox12.Text });
        wList.Add(new TextBox { Text = textBox13.Text });
        wList.Add(new TextBox { Text = textBox14.Text });
        wList.Add(new TextBox { Text = textBox15.Text });
        wList.Add(new TextBox { Text = textBox16.Text });
        wList.Add(new TextBox { Text = textBox17.Text });
        wList.Add(new TextBox { Text = textBox18.Text });

        for (int i = 0; i < 9; i++) 
        {
            g[i] = Convert.ToInt32(gList[i]);

        }
        for (int i = 0; i < 9; i++)
        {
            w[i] = Convert.ToInt32(wList[i]);

        }}

3 个答案:

答案 0 :(得分:0)

我不确切地知道你的意思但是,简单的方法是创建一个文本框数组。 2个文本框数组可以更轻松地操作它们,然后将每个值放入数组中。 因此,使用for循环,您将遍历数组以复制它们

for (int i = 0; i <= arrayMaxIndex; i++) {
    arrayNumbers[i] = arrayTxtBoxNum[i];
    // same for the other one

抱歉,但我是用手机写的

答案 1 :(得分:0)

您正在创建新的文本框来保存值,因此您的演员阵容错误

for (int i = 0; i < 9; i++) 
{
        //Wrong, it's a textbox!
        g[i] = Convert.ToInt32(gList[i]);
        //should be
        g[i] = Convert.ToInt32(gList[i].Text);
}

此外,您可以直接使用

代替保存和投射
g[0] = Convert.ToInt32(textBox1.Text);
g[1] = Convert.ToInt32(textBox2.Text);

//And so on...

答案 2 :(得分:0)

假设您已经拥有18个TextBox的表单,如您所述。

步骤1:将所有文本框放入2个列表以便于访问,因此有TextBox数组,其中包含相应数组的匹配索引。

var valueTextBoxes = form.Controls.OfType<TextBox>().Take(9);    
var percentageTextBoxes = form.Controls.OfType<TextBox>().Take(9);

第2步:获取所有值并将其转换为保留默认值的数组。 TryParse能够保持&#34;不是整数&#34;的值。通过为数组返回当前的元素。 Enumerable.Select让我们同时拥有值和索引,这样当Text不表示整数值时我们就可以获取数组的旧值。

int value = 0; // for TryParse
g = valueTextBoxes
      .Select((t,index) => int.TryParse(t.Text, out value) ? value : g[index])
      .ToArray();

w = percentageTextBoxes
      .Select((t,index) => int.TryParse(t.Text, out value) ? value : w[index])
      .ToArray();

步骤3:如果需要,使用相应数组的常规for更新所有文本框。