将文本框值添加到不工作的数组C#

时间:2017-10-13 12:44:28

标签: c# arrays winforms

我正在尝试将textbox和numericUpandDown值添加到数组中,但它似乎不起作用。

Carro []carros = new Carro[1];
private Carro carro;

public Form1()
{
    ..
}

private void Form1_Load(object sender, EventArgs e)
{
    ..
}

private void AdicionarCarro()
{
    this.carro = new Carro(textboxCor.Text, textboxMarca.Text, textboxModelo.Text,
        (int.Parse(numUpDownCilindrada.Text)), (int.Parse(numUpDownVelocidade.Text)));
}

private Carro[] AdicionarArray(Carro carro, Carro[] array)
{
    AdicionarCarro();

    int novoTamanho = array.Length + 1;

    Carro[] carros = new Carro[novoTamanho];

    for (int i = 0; i < array.Length; i++)
    {
        carros[i] = array[i];
    }

    carros[novoTamanho] = carro;


    return carros;
}

private void buttonGravar_Click(object sender, EventArgs e)
{
    AdicionarArray(carro, carros);
}

当我输入值并单击“buttonGravar”时,它会给我这个 错误:

Error

我很高兴得到一些提示/帮助。

3 个答案:

答案 0 :(得分:6)

使用System.Collection.Generic.List<T>会更简单,因为它没有固定的大小:

List<Carro> carros = new List<Carro>();
carros.AddRange(array);
carros.Add(carro);
return carros;

答案 1 :(得分:3)

更好的方式:

private List<Carro> Carros;

public Form1()
{
    Carros = new List<Carro>();
    ..
}

private void Form1_Load(object sender, EventArgs e)
{
    ..
}

private void AdicionarCarro()
{
    var carro = new Carro(textboxCor.Text, textboxMarca.Text, textboxModelo.Text,
        (int.Parse(numUpDownCilindrada.Text)), (int.Parse(numUpDownVelocidade.Text)));
    Carros.Add(carro);
}

private void buttonGravar_Click(object sender, EventArgs e)
{
    AdicionarCarro();
}

帮助您理解代码:

carros[novoTamanho] = carro;

应该是

carros[novoTamanho - 2] = carro;

原因:

数组索引从0开始。novoTamanh表示新的长度(从1开始,而不是与索引不同),这是在数组外部。

答案 2 :(得分:0)

它是一个超出范围异常的索引,因为您的数组Carro的大小为tmanho:

Carro[] carros = new Carro[novoTamanho];

和carros可以准确包含&#34; novoTamanho&#34;从&#34; 0&#34;索引的项目到&#34; novoTamanho -1&#34;

您可以通过定义:

来解决此问题
int novoTamanho = array.Length + 2;

或者,如果您不想管理索引,请使用列表:

List<Carro> listCarro = new List<Carro>;
listCarro.AddRAnge(array);
listCarro.Add(carro); 
return listCarro.ToArray();