将文本框值添加到数组并将其显示在列表框中。单击按钮时刷新数组

Add textbox value to array and show this in listbox. Refresh the array when button clicked

于是我运行陷入了下面的问题。我有一个文本框和列表框。我做了一个这样的数组:

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

数组有 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)
{

需要包含将其添加到数组中的代码。喜欢刷新数组。

我卡住了,互联网上的信息太多了,每个人都建议一个列表,但我需要使用一个数组。将不胜感激。

您不能像这样分配数组:

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

在 class 上下文中。相反,你应该做这样的事情

public partial class Form1 : Form        
{

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

然后,如果您将 Brands 声明为 Form1 class 字段,那么在

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
    }

Ian 的回答很好,这意味着你检查是否有 space 并让你知道 space 在哪里。

另一种方法是不使用数组,而是使用列表。

有了列表,您可以执行以下操作:

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");
}

我相信(如果我错了,请有人纠正我)List 的内存开销稍大,但我个人更喜欢在可能的情况下使用它们而不是数组。

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" };

回到你的问题为什么不创建你自己的 class 随心所欲

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
}

// 我没有编译它,但这是我的想法 所以在你的表格中你只需使用它 希望对您有所帮助

此致