Error con arreglo String C#

Iniciado por SrTrp, 11 Octubre 2018, 03:20 AM

0 Miembros y 1 Visitante están viendo este tema.

SrTrp

Bueno lo que quiero es pasar datos de un arreglo de una clase hacia otra pero cuando lo hago "supuestamen" si pasa datos correctamente y en esto me doy cuenta desde la primera clase donde quiero mandar, pero desde la otra clase que lo recibe quiero monstrar un dato y da un error de referencia de objeto.
haci es como lo esto mandando.
Código (csharp) [Seleccionar]

private void Vt2_FormClosing(object sender, FormClosingEventArgs e)
        {
//INTENTE ASI
            Form1 tr = new Form1();
            tr.arre1= this.miarregloenvio1;
            tr.arre2= this.miarregloenvio2;
//Y ASI
            Form1 tr = new Form1();
            tr.setArre1(this.miarregloenvio1);
            tr.setArre2(this.miarregloenvio2);
//y revise asi si si se envio los datos
MessageBox.Show(tr.arre1[0], "x", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

y si me muestra el dato desde esaclase

también cuando quiero revisar o monstrar el dato desde el form1 me da error
Código (csharp) [Seleccionar]

Form1 tr= new Form1();
            string st = tr.arre1[0];
            MessageBox.Show(st, "x", MessageBoxButtons.OK, MessageBoxIcon.Information);

Los arreglos son publicos .

ThunderCls

Estas creando una variable local (Form1 tr) en tu metodo Vt2_FormClosing y por consiguiente dicha variable solo existira dentro de esa funcion, una vez la ejecucion del programa retorne de tu funcion Vt2_FormClosing la variable tr sera reciclada por el colector de basura y no existira mas en memoria, lo que trae consigo un error de acceso de memoria al querer acceder a un elemento de un arreglo que no existe en tu otra funcion.
Para hacer lo que deseas puedes:
1- Crearte una variable publica "Form1 tr" con sus metodos de acceso dentro de la clase donde deseas tener dicha referencia
2- Crearte una variable global o estática
3- Pasar la variable como referencia a la proxima funcion en la que usaras los datos
-[ "...I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/

SrTrp

Ya intente crear la variable global pero sigue igual, pero cierto me puse a pensar al crear el objeto cuando se cierra se desecha y por decirlo no existe mas ese objeto o "datos", lo que quiero tener del form2 al form1 no me explique mucho cuando plantee el post pero ahora si espero hacerlo
-Se abre primero que nada el Form1 donde tengo un arreglo vació sin declarar el tamaño
-Doy click a un botón se me abre el Form2(el form1 siempre se mantiene abierto)
-Lleno un arreglo con datos en el form2
-Cierro el form2 y al momento del evento(en que se cierra) quiero que el arreglo del form1 se llene con los datos del arreglo del form2, y utilizar o monstrar datos del arreglo.
en si sería Como pasar datos de un form a otro.
Ambos arreglos son globales y publicos.

ThunderCls

Cita de: SrTrp en 14 Octubre 2018, 05:02 AM
Ya intente crear la variable global pero sigue igual, pero cierto me puse a pensar al crear el objeto cuando se cierra se desecha y por decirlo no existe mas ese objeto o "datos", lo que quiero tener del form2 al form1 no me explique mucho cuando plantee el post pero ahora si espero hacerlo
-Se abre primero que nada el Form1 donde tengo un arreglo vació sin declarar el tamaño
-Doy click a un botón se me abre el Form2(el form1 siempre se mantiene abierto)
-Lleno un arreglo con datos en el form2
-Cierro el form2 y al momento del evento(en que se cierra) quiero que el arreglo del form1 se llene con los datos del arreglo del form2, y utilizar o monstrar datos del arreglo.
en si sería Como pasar datos de un form a otro.
Ambos arreglos son globales y publicos.

A ver, creo que no me explique bien, necesitas entender algunos conceptos de POO. Form1 y Form2 son simplemente dos clases como cualquier otras y para poder compartir variables entre ellas tienes que usar las reglas de POO.
1- Una de ellas seria la que te dije anteriormente, crearte una variable publica y estática en Form1:

Código (csharp) [Seleccionar]
public partial class Form1 : Form
{
        public static string[] strArray;
}


Luego simplemente usas la variable desde Form2 como:

Código (csharp) [Seleccionar]
for (int i = 0; i < Form1.strArray.Length; i++)
    Form1.strArray[i] = this.miarregloenvio[i];


2- Crearte una variable publica en Form1 con acceso de lectura y escritura (Properties o Get/Set). Crear una variable de tipo Form1 en la clase Form2 para de esta forma tener la instancia de Form1 en el ambito del Form2. Dicha instancia la puedes pasar mediante un parametro al constructor de Form2 o mediante cualquier otro método.

Código (csharp) [Seleccionar]
public partial class Form1 : Form
{
        private string[] strArray;
        public string[] StrArray
        {
            get { return strArray; }
            set { strArray= value; }
        }

        // dentro de tu funcion
       Form2 frm2 = new Form2(this);
}


Código (csharp) [Seleccionar]
public partial class Form2 : Form
{
        private Form1 frm1;
        public Form2(Form1 pfrm1)
        {
            InitializeComponent();
            this.frm1 = pfrm1;
        }

        // Dentro de tu funcion
       if(frm1.StrArray == null)
            frm1.StrArray = new string[SIZE];
       for (int i = 0; i < frm1.StrArray.Length; i++)
           frm1.StrArray[i] = this.miarregloenvio1[i];
}


3- Usa tu imaginación, existen muchas formas de lograrlo
-[ "...I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/

SrTrp