2010-06-02 21 views
5

Quiero pasar un objeto C# entre los formularios de ganar. Por el momento, he configurado un proyecto básico para aprender a hacer esto que consiste en dos formularios: form1 y form2 y una clase llamada class1.cs que contiene los métodos get y set para establecer una variable de cadena con un valor ingresado en form1. (Se supone que el formulario 2 obtiene el valor almacenado en el objeto clase1)Pasando el objeto a diferentes formularios de Windows

¿Cómo puedo obtener el valor de cadena del objeto que se configuró en form1? ¿Debo pasarlo como un parámetro para form2?

¡Algún comentario/ayuda serán apareados!

Gracias,

EDIT: Aquí está el código que tengo en este momento: (Form1.cs)

private void button1_Click(object sender, EventArgs e) 
    { 
     this.Hide(); 

     Form2 form2 = new Form2(); 

     form2.Show(); 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     if (textBox1.Text != "") 
     { 
      Class1 class1 = new Class1(); 

      class1.setStringValue(textBox1.Text); 
     } 
    } 
} 

}

Respuesta

7

Hay algunas formas diferentes de hacerlo, puede usar un objeto de clase estático, el ejemplo anterior sería ideal para esta actividad.

public static class MyStaticClass 
{ 
    public static string MyStringMessage {get;set;} 
} 

No es necesario a instancia de la clase, simplemente llamarlo

MyStaticClass.MyStringMessage = "Hello World"; 
Console.WriteLine (MyStaticClass.MyStringMessage); 

Si desea una instancia del objeto se puede pasar la clase de objeto que se crea en Form1 Form2 en el siguiendo.

private void button1_Click(object sender, EventArgs e) 
    { 
     this.Hide(); 
     Form2 form2 = new Form2(); 
     form2.MyClass = class1; 
     form2.Show(); 
    } 

A continuación, cree una propiedad en Form2 para aceptar el objeto de la clase.

public Class1 MyClass {get;set;} 

recuerde hacer del objeto Class1 una variable global en lugar de crearlo dentro del botón 2 en sí.

+1

Gracias por el fragmento de código, Sres. ¿Usarías una clase estática, por ejemplo, si quisieras tener una clase utilizada para almacenar cosas que no requieren muchas instancias, como configuraciones para una aplicación? Considerando que, una clase estándar podría ser utilizada para crear múltiples instancias si es necesario, como los objetos de usuario? – Theomax

+0

Exactamente eso, uso clases estáticas en varios lugares, para mantener los detalles de conexión de la base de datos, los detalles del usuario actual. Solo tenga cuidado, especialmente si obtiene datos que podrían cambiar, puede terminar con información desactualizada. –

4

Sí, en Form1 se declara una instancia de Clase 1 y luego establecer los parámetros según sea necesario, luego pasarlo a Form2. Por ejemplo, podría tener un constructor en Form2 y tener un parámetro Class1 en él. Asumiendo que el Formulario 1 crea el Formulario 2, de lo contrario, debe tener alguna forma para que el Formulario 1 encuentre el Formulario 2 para pasar la instancia.

+0

Gracias por su respuesta. He editado mi pregunta y he añadido el código para form1.cs: ¿cómo puedo pasar la instancia del objeto a form2 desde que se llama a form2.show() cuando se hace clic en un botón diferente? Podría dar un ejemplo? – Theomax

+0

En lugar de declarar 'Form2 form2 = new ...' en el manejador de eventos button1, solo debe declararlo como miembro de la clase. De esta forma, podrá llamar a 'Form2.Show()' en el controlador de eventos button1 y también puede llamar a algo como 'From2.ShowNewValues ​​(class1)' en el controlador button2. –

+0

Aquí puede encontrar una muestra de un miembro de la clase: http://www.csharp-station.com/Tutorials/Lesson07.aspx –

Cuestiones relacionadas