Passing array between forms and managing in arrays

12,935

Solution 1

Don't use arrays if you want a data structure that you need to add items to.

Use a generic collection like List<T>.

In your case, a list of integers would be a List<int>.

IList<int> listOfInt = new List<int>();
listOfInt.Add(19);
listOfInt.Add(12);
Form2 frm2 = new Form2();
frm2.TakeThis(listOfInt);
frm2.Show();

When on Form2, your TakeThis function would look like this:

public voidTakeThis(IList<int> listOfInt)
{
  listOfInt.Add(34);
}

This will also work when passing the list to another form, as List is a reference type whereas arrays are value types. If you don't know what this means, see this article.

Solution 2

Rather use ArrayList or even better IList<T>. Arrays cannot be resized in C#

Solution 3

You will have to use ref argument on frm2.TakeThis() method:

Here is an MSDN article on it : Passing Arrays Using ref and out (C# Programming Guide).

void TakeThis(ref Int32[] array)
{
    // Change array
}

and use like:

frm2.TakeThis(ref arrayOfInt);

Arrays need to passed by reference if you want to persist changes to them.

If you must not use an Array use a Collection like System.Collections.Generic.List<T>.

Solution 4

Use List<Int> and use oList.Add(item) method to add elements as array is Fixed in Lenght (you already giving it size at a time of initialization) But if you want to use array at any cost then make a logic to create a new array upto the size of Old+ new added element and return that.

UPDATED I believe you are facing problem because you have taken List of String instead or Int.

            List<int> oIntList = new List<int>();
            oIntList.Add(1);
            oIntList.Add(3);
            oIntList.Add(4);
            oIntList.Add(5);

            int[] oIntArr = oIntList.ToArray();
Share:
12,935
xplorer00
Author by

xplorer00

Updated on June 04, 2022

Comments

  • xplorer00
    xplorer00 almost 2 years

    I want to transfer an array from Form1 to Form2, then on Form2 add some values to the array. On Form1 button click I put this code:

            int[] arrayOfInt = new int[4];
            arrayOfInt[0] = 19;
            arrayOfInt[1] = 12;
            Form2 frm2 = new Form2();
            frm2.TakeThis(arrayOfInt);
            frm2.Show();
    

    In the form2 i created TakeThis(int[]) that catches the values from the form1 and display the values of the array on a label. Now, i cannot figure how to add some values to array. For example arrayOfInt[2] and arrayOfInt[3] and send to Form3.

    Edit:

    I decided to use a List to store my data but at the end I must convert a list to an array because I am doing some reporting and math operations with the data.

    This example is different from the example above. In this store all inputs from textboxs,comboxes in the list. At the end i need to convert the list into an array.

    What have I done, I created a new global class:

    static class List{
    
       static List<string> list;
    
       public static void NewList(){
       list=new List<string>();
       }
    
       public  static void Save(string value){
       list.Add(value);
       }
    
       public static void Display(){
       foreach(var value in list){
       MessageBox.Show(value);
       }
       }
    
    }
    

    The data is inserted between forms,

    List.save(some_strings);
     ...
    

    but at the end I need to convert the list in an array. I googled and I find the ToArray() function but i dont know how to use in my code. I tried with properties but i couldn't do the conversion. Please help.

    Edit2 I found the solution. In the global static class List I created a method that returns a List of strings:

    public static List<string> GetList(){
                  return list;
                   }
    

    Then, I created a new empty List of strings on Form2. Copied the old list to the new list and converted it in an array.

    List<string> li=new List<string>();
    li=List.GetList();
    string[] temp=li.ToArray();