2016-01-12 96 views
3

所以我遇到了以下問題。我有一個文本框和列表框。我做了這樣一個數組:將文本框值添加到數組並在列表框中顯示。點擊按鈕時刷新數組

string[] Brands = new string[10]; 
      Brands[0] = "Yamaha"; 
      Brands[1] = "Suzuki"; 
      Brands[2] = "Harley"; 
      Brands[3] = "Kawasaki"; 

數組有10個值的地方,但我只指定了四個值。我想通過點擊按鈕在該數組中添加10個值。我不能使用列表,它必須是數組。我已經發現我需要將上述部分放置在

{ 
    public partial class Form1 : Form   
    { 

     string[] Brands = new string[10]; 
     Brands[0] = "Yamaha"; 
     Brands[1] = "Suzuki"; 
     Brands[2] = "Harley"; 
     Brands[3] = "Kawasaki"; 

但它並不認可品牌[]。

private void buttonAddbrand_Click(object sender, EventArgs e) 
{ 

需要包含的代碼,用於將其放入陣列。就像刷新陣列一樣。

我被困在互聯網上太多的信息,每個人都建議列表,但我需要使用一個數組。幫助將不勝感激。

+0

當所有項目全部填入數組時,添加的標準是什麼? – Shaharyar

+0

我只需要有可能性,當我點擊Addbrand按鈕時,向陣列添加品牌直到它完整。它需要在列表框中顯示陣列中的填充位置。就這樣。 – Needsomehelp

回答

4

您不能分配數組是這樣的:

public partial class Form1 : Form   
{ 

    string[] Brands = new string[10]; 
    Brands[0] = "Yamaha"; //fail 
    Brands[1] = "Suzuki"; //fail 
    Brands[2] = "Harley"; //fail 
    Brands[3] = "Kawasaki"; //fail 

在類上下文。相反,你應該做這樣的事情

public partial class Form1 : Form   
{ 

    string[] Brands = new string[10] { "Yamaha", "Suzuki", "Harley", "Kawasaki", "", "", "", "", "", "" }; 

然後,如果你聲明BrandsForm1class場,然後在

private void buttonAddbrand_Click(object sender, EventArgs e) 
{ 
    //Brands will be recognized 
} 

品牌將被識別。如果你需要做的是向數組中添加一些東西(並且你必須使用數組)。那麼你也應該保留元素的數量目前陣列像這樣:

public partial class Form1 : Form   
{ 

    string[] Brands = new string[10] { "Yamaha", "Suzuki", "Harley", "Kawasaki", "", "", "", "", "", "" }; 
    int brandNo = 4; 

然後,當你添加新項陣列,像這樣做:

private void buttonAddbrand_Click(object sender, EventArgs e) 
{ 
    if(brandNo >= 10) 
     return; //cannot add more brand 
    Brands[brandNo++] = "NewBrand"; //at the brandNo AFTER you put "NewBrand", see post-increment. 
} 

編輯:

至於在構造函數中的數組初始化,這是你的老師想要的 - 它實際上是較長的方法。但對於教學的緣故,我將只顯示它仍然:

public partial class Form1 : Form   
{ 
    string[] Brands = new string[10]; 
    int brandNo; //This is a must 
    public Form1(){ 
     InitializeComponent(); 
     Brands[0] = "Yamaha"; //ok 
     Brands[1] = "Suzuki"; //ok 
     Brands[2] = "Harley"; //ok 
     Brands[3] = "Kawasaki"; //ok 
     brandNo = 4; //This is a must 
    } 
+0

謝謝,但是當我嘗試這一行代碼: string [] Brands = new string [10] {「Yamaha」,「Suzuki」,「Harley」,「Kawasaki」}; int brandNo = 4; 此錯誤:期望長度爲'10'的數組初始值設定項 – Needsomehelp

+0

我從我的教程中得到以下提示:在表單中初始化數組。在publicForm1中,您可以添加一個構造函數以添加品牌Yamaha Suzuki等。然後,在您的ButtonAddbrand中,您將編寫一些將值添加到數組中的代碼。 – Needsomehelp

+0

@需要幫助你的老師沒有錯,可以這麼說。因爲你也可以做到。但是,通常在窗體構造函數中初始化一個有限數字的數組可能需要比使用'field'定義初始化時多行。你也可以在窗體構造器中放置'Brands [0]','[1]','[2]',[3]'(4行)(並且不要忘記初始化'brandNo')你會得到相同的結果。我認爲上面展示的方法比較簡單(1行)。 – Ian

2

伊恩的回答是一個很好的,這意味着你檢查是否有空間,可以讓你知道在哪裏的空間。

另一種方法,可以不使用數組,而是使用列表。

有了你可以做以下列表:

List<string> Brands = new List<string> { "Yamaha", "Suzuki", "Harley", "Kawasaki" }; 

然後在你的插件,你可以簡單地做:

private void buttonAddbrand_Click(object sender, EventArgs e) 
{ 
    if(Brands.Count >= 10) 
     return; //cannot add more brand 
    Brands.Add("NewBrand"); 
} 

我相信(請有人糾正我,如果我錯了)有是一個稍大的內存開銷與列表,但我個人更喜歡使用他們的陣列,我可以。

+0

謝謝,但我需要使用一個數組。我同意伊恩的方法。但我的教師說這樣的話:在表單中初始化數組。在publicForm1中,您可以添加一個構造函數以添加品牌Yamaha Suzuki等。然後,在您的ButtonAddbrand中,您將編寫一些將值添加到數組中的代碼。 – Needsomehelp

+0

@Pheonyx,是的,我同意。如果不是因爲教學的緣故,我也會使用'List ' – Ian

1

到Ian的answare確定你可以用這種方式初始化這個爲什麼不呢?

string[] Brands = new string[10]; 
Brands[0] = "Yamaha"; 
Brands[1] = "Suzuki"; 
Brands[2] = "Harley"; 
Brands[3] = "Kawasaki"; 

而且在這樣

string[] Brands = new string[10] { "Yamaha", "Suzuki", "Harley", "Kawasaki" }; 

回來你爲什麼不創建自己的類裏面做的難題無論你是喜歡

public class Brands 
{ 
    #region private 

    private int _maxCapacity { get; set; } 
    private readonly List<string> _brands = new List<string>(); 

    #endregion 

    #region Constructor 

    public Brands(int maxCapacity) 
    { 
     _maxCapacity = maxCapacity; 
    } 

    #endregion 

    #region public 

    // return all as array 
    public string[] AsArray 
    { 
     get { return _brands.ToArray(); } 
    } 

    /// <summary> 
    /// recive the actual count 
    /// </summary> 
    public int Count 
    { 
     get { return _brands.Count; } 
    } 

    /// <summary> 
    /// give item from position 
    /// </summary> 
    /// <param name="item"></param> 
    /// <returns></returns> 
    public string Get(int item) 
    { 
     return _brands.Count <= item ? _brands[item] : string.Empty; 
    } 

    /// <summary> 
    /// Set(Add) a value if enougth capacity 
    /// </summary> 
    /// <param name="value"></param> 
    public void Set(string value) 
    { 
     if (_brands.Count < _maxCapacity) 
      _brands.Add(value); 
     else 
     { 
      throw new ArgumentOutOfRangeException("Capacity"); 
     } 
    } 

    /// <summary> 
    /// change an item 
    /// </summary> 
    /// <param name="item"></param> 
    /// <param name="value"></param> 
    public void Set(int item, string value) 
    { 
     if (_brands.Count <= item) 
      _brands[item] = value; 
    } 

    #endregion 
} 

//我沒編譯它但這是想法 所以在你的形式,你只需使用它 我希望可以幫助

最好的問候

相關問題