2017-10-13 76 views
0

我試圖添加文本框和numericUpandDown值到數組,但它似乎並沒有工作。將文本框值添加到不工作的數組C#

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

我會覺得很高興得到它的一些提示/幫助。

+1

數組定義爲僅保存一個值,'卡羅[]卡羅=新卡羅[1];'這就是爲什麼你得到那個錯誤 –

+1

[什麼是「索引超出範圍」異常,我該如何解決它?](https://stackoverflow.com/questions/24812679/what-is-an-index-超出範圍的異常和如何做我修復它) – SeM

+0

你忘記使用AdicionarArray()的返回值。這只是一個根本錯誤的做法,而不僅僅是因爲你忘記更新carros變量,而是將其聲明更改爲'List '而不是。 –

回答

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開始,而不是0,不像索引),這是外部數組。

+1

-2?因爲'int novoTamanho = array.Length + 1;'。 –

+4

所有這些雜技索引都在乞求某人指出該代碼真的有多可怕,以及它需要一個徹底的檢修,而不是更多的bandaids。 – DonBoitnott

+0

哦,是的!謝謝,那真是太愚蠢了,我沒有意識到這一點! – ckvywk

6

使用System.Collection.Generic.List<T>就會簡單得多,因爲它沒有一個固定的大小:

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

我仍然是一名學生,但我們仍然沒有參與(如果我沒有記錯的話),感謝替代解決方案! – ckvywk

+0

我用這個,但它似乎並沒有工作,它說:「不能隱式轉換類型'System.Collections.Generic.List '到'CriarCarroForm.Carro []'」 – ckvywk

0

這是一個索引超出範圍的異常,因爲你的陣列卡羅是大小tmanho的:

Carro[] carros = new Carro[novoTamanho]; 

和carros可以完全包含索引從「0」到「novoTamanho -1」的「novoTamanho」項目

您可以簡單地通過定義:

int novoTamanho = array.Length + 2; 

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

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