Home > database >  Windows form - Make array to stop when there is no more data
Windows form - Make array to stop when there is no more data

Time:06-14

Hello guys I am new to coding, and new to arrays as well and I was wondering how can I make this code to stop when there is no more names in the array, and from stop saying the number 10 always before the names. As well to show the position of the names one number above, not just starting from 0, but from 1.

Here is what I have so far.

string[] list = new string[10];
int pos = 0;

public Form1()
{
    InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
    string StudentName;

    StudentName = textBox1.Text;

    list[pos] = StudentName;

    pos  ;

    textBox1.Text = "";
}

private void button2_Click(object sender, EventArgs e)
{
    MessageBox.Show(list.GetLength(0).ToString());

    string message;
    for (int i = 0; i < lista.GetLength(0); i  )
    {
        message = "";
        message = "The student"   "   "   list[i]   " has the position "   i ;
        MessageBox.Show(message);
               
    }
}

CodePudding user response:

Use a dynamic array, aka List<T>

List<string> list = new List<string>();

Instead of manually keeping track of the position, just add the item to the end:

list.Add(StudentName);

You can check the number of current items in the list by using .Count.

for (int i = 0; i < list.Count; i  ) {...}

But you can also use a foreach loop to iterate over all the items in the list, but this way you do not get the position automatically.

foreach(var item in list){...}

CodePudding user response:

For the sake of completeness, another way would be to filter out empty entries. Linq is especially great for working with Enumerables like these:

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/ https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.where?view=net-6.0

using System;
using System.Linq;
                    
public class Program
{
    public static void Main()
    {
        string[] list = new string[10];

        list[0] = "test1";
        list[1] = "test2";

        for (var index = 0; index < list.Length; index  )
        {
            var s = list[index]; 
            Console.WriteLine($"[{index}] {s}");
        }

        // Filter out null, an empty string or only whitespace characters from the array
        list = list
            .Where(c => !string.IsNullOrWhiteSpace(c))
            .ToArray();

        Console.WriteLine("==========================");

        for (var index = 0; index < list.Length; index  )
        {
            var s = list[index];
            Console.WriteLine($"[{index}] {s}");
        }

    }
}

https://dotnetfiddle.net/g7e0Nm

CodePudding user response:

First you can specify the maximum capacity of your array using a const

const int arrayCapacity = 10;

string[] list = new string[arrayCapacity];
int pos = 0;

Then you should add some validation if the array is full, according to your maximum capacity, and/or if the textbox is empty.

private void button1_Click(object sender, EventArgs e)
{
    if (string.IsNullOrEmpty(textBox1.Text))
    {
        MessageBox.Show("Textbox was empty");
        return;
    }
    if (pos > arrayCapacity - 1)
    {
        MessageBox.Show("Array is full");
        textBox1.Clear();
        return;
    }

    list[pos] = textBox1.Text;
    pos  ;
    textBox1.Clear();
}

And the last step is to create a new array in any case you have a smaller number of students than your initial array's capacity

private void button2_Click(object sender, EventArgs e)
{
    var arr = list.Where(x => !string.IsNullOrEmpty(x)).ToArray();

    for (int i = 0; i < arr.Length; i  )
    {
        string message = "The student"   " "   arr[i]   " has the position "   (i   1);
        MessageBox.Show(message);
    }
}
  • Related