如何将数组元素显示到文本框中?

时间:2018-10-02 11:25:16

标签: c#

任何人都可以帮助我, 我正在尝试将我的数组元素显示到文本框和列表视图中 listview有效,但文本框显示我的int 6时间,这是我的代码:

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ArrayList numbers = new ArrayList();
            int[] myNumbers = new int[6];

            Random rnd = new Random();
            int randomNumber;
            for (int i = 0; i < 6; i++)
            {
                do
                {
                    randomNumber = rnd.Next(1, 49);
                }
                while (numbers.Contains(randomNumber));

                numbers.Add(randomNumber);
            }

            numbers.Sort();
            numbers.CopyTo(myNumbers);
            //listView1.Items.Add(myNumbers.ToString);
            foreach (int j in myNumbers)
            {




                listView1.Items.Add(j.ToString());

                label1.Text += j.ToString();


                int num1 = myNumbers[0];
                int num2 = myNumbers[1];
                int num3 = myNumbers[2];
                int num4 = myNumbers[3];
                int num5 = myNumbers[4];
                int num6 = myNumbers[5];
                textBox1.Text += num1;
                textBox2.Text += num2;
                textBox3.Text += num3;
                textBox4.Text += num4;
                textBox5.Text += num5;
                textBox6.Text += num6;

            }

        }

        private void button2_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
            textBox2.Text = "";
            textBox3.Text = "";
            textBox4.Text = "";
            textBox5.Text = "";
            textBox6.Text = "";

            listView1.Clear();
            label1.Text = "";
        }
    }
}

有人可以帮助我,告诉我哪里出问题了吗?

3 个答案:

答案 0 :(得分:0)

您应该

textBox1.Text = num1;

不是

textBox1.Text += num1;

编辑:您不需要循环...

答案 1 :(得分:0)

您正在循环中设置文本。因此,您要设置六次值,可以看到,因为要附加+ =。您可以将整个块移动到numbers.CopyTo(myNumbers);之后,因此每个值仅设置一次。同样也不需要+ =。

int num1 = myNumbers[0];
int num2 = myNumbers[1];
int num3 = myNumbers[2];
int num4 = myNumbers[3];
int num5 = myNumbers[4];
int num6 = myNumbers[5];
textBox1.Text = num1.ToString();
textBox2.Text = num2.ToString();
textBox3.Text = num3.ToString();
textBox4.Text = num4.ToString();
textBox5.Text = num5.ToString();
textBox6.Text = num6.ToString();

答案 2 :(得分:0)

您的代码中几乎没有问题。

您不需要ArrayList numbersint[] myNumbers,也可以按索引访问列表。 您使用了太多的幻数:6、1、49。它们可以用变量替换。
在将值添加到listView之前,可以清除它。您不必在foreach上进行myNumbers循环,您可以使用AddRange方法直接添加它们。

label1.Text+=j.ToString()的结果有点难以理解,因为所有数字都粘在一起,结果为123564132321。
tbResult.Text = string.Join(", ", numbers);join然后以一个很好的“,”作为分隔符。

最后,如果您不想复制N次以上,则将同一行用于textbox.text初始化。您可以找到所有与模式匹配的文本框。

var numbers = new List<int>();

while (numbers.Count < userInput)
{
    var tempRnd = rnd.Next(lowerBound, upperBound);
    if (!numbers.Contains(tempRnd))
    {
        numbers.Add(tempRnd);
    }
}

numbers.Sort();

listView1.Items.Clear();
listView1.Items.AddRange(numbers.Select(x => new ListViewItem { Text = x.ToString() }).ToArray());

tbResult.Text = string.Join(", ", numbers);

int i = 0;
foreach (TextBox tb in this.Controls.OfType<TextBox>().Where(l => l.Name.StartsWith("GeneratedTB_")))
{
    tb.Text = numbers[i].ToString();
    i++;
}