Bueno, hace poco publique un artículo sobre como pasar datos entre páginas web, pero ¿qué pasa con las aplicaciones desktop?

No me he olvidado de ellas. Es que como trabajo como webmaster las he dejado un poco de lado. Así que hoy vamos a ver algunas formas de hacer esto.

Para eso me he ido al Visual Estudio (2010) y he creado un ejemplo muy elegante y con mucho esfuerzo… (:))

Pues tenemos este Form inicial, con sus Textbox (singleline y multiline), un comboBox y un botón.

Form1

Luego creamos otro Form (2) que es el que recibirá los datos que le enviemos. Que solo tendrá un label donde mostrar un mensaje con todos los datos que introduciremos en el Form1.

Entonces vamos a la parte del código para hacerle unos ajustes, de modo que reciba los valores que le pasemos.

Código original del Form2

namespace PruebaForms
{
 public partial class Form2 : Form
 {
 public Form2()
  {
    InitializeComponent();
  }
 private void Form2_Load(object sender, System.EventArgs e)
  {
  }
 }
}

Si se dan cuenta, a partir de aquí todo funciona como una clase normal (Pueden ver más sobre las clases y sus atributos aquí). Así que se pueden pasar los valores de varias formas.

Ejemplo 1 Como atributos públicos de la clase solamente.

public partial class Form2 : Form

{

// Creamos las variables donde almacenaremos los valores a recibir

public string NombreApellidos { get; set; }

public string Pensamiento { get; set; }

public string Color { get; set; }

public Form2()

{

InitializeComponent();

}

private void Form2_Load(object sender, System.EventArgs e)

{

labelResultado.Text = "El Usuario " + NombreApellidos + " le gusta el color " + Color + " y piensa que " + Pensamiento;

}

}

Dando doble clic sobre nuestro botón en el Form1, estaremos accediendo al evento Click del mismo, que es donde pondremos nuestro código para pasar los valores. En este caso.

private void buttonAceptar_Click(object sender, EventArgs e)

{

Form2 form2 = new Form2

{

NombreApellidos = textBoxNombre.Text +" "+ textBoxApellidos.Text,

Pensamiento = textBoxPensamiento.Text,

Color = comboBoxColor.Text

 

};

Hide();

form2.Show();

}

Ejemplo 2 Mediante métodos.

Aquí tengo 3 variantes (o al menos las que conozco)

-Variante 1

En el constructor de la clase del Form2 le pasamos los parámetros a recibir

namespace PruebaForms

{

public partial class Form2 : Form

{

// Creamos las variables donde almacenaremos los valores a recibir

public string NombreApellidos { get; set; }

public string Pensamiento { get; set; }

public string Color { get; set; }

//Modificamos el constructor

public Form2(string nombreCompleto, string pensamiento, string color)

{

InitializeComponent();

NombreApellidos = nombreCompleto;

Pensamiento = pensamiento;

Color = color;

 

}

 

private void Form2_Load(object sender, System.EventArgs e)

{

labelResultado.Text = "El Usuario " + NombreApellidos + " le gusta el color " + Color + " y piensa que " + Pensamiento;

}

 

 

}

}

 

Y en el botón del Form1

private void buttonAceptar_Click(object sender, EventArgs e)

{

Form2 form2 = new Form2(textBoxNombre.Text +" "+ textBoxApellidos.Text,

comboBoxColor.Text);

Hide();

form2.Show();

}

 

-Variante 2

Mediante sobrecarga de métodos al constructor del Form2. Así

public partial class Form2 : Form

{

// Creamos las variables donde almacenaremos los valores a recibir

 

public string NombreApellidos { get; set; }

public string Pensamiento { get; set; }

public string Color { get; set; }

// Constructor Form2

public Form2()

{

InitializeComponent();

 

}

// Constructor Form2 sobrecargado

public Form2(string nombreCompleto, string pensamiento, string color)

{

InitializeComponent();

NombreApellidos = nombreCompleto;

Pensamiento = pensamiento;

Color = color;

 

}

 

private void Form2_Load(object sender, System.EventArgs e)

{

labelResultado.Text = "El Usuario " + NombreApellidos + " le gusta el color " + Color + " y piensa que " + Pensamiento;

}

 

 

}

 

En este caso, en el botón del Form1 podremos poner lo mismo el código del ejemplo 1 que el de la variante 1, debido a que la sobrecarga de métodos en el constructor me permite esto. Así que no lo voy a repetir.

-Variante 3

Y por último. Podemos dejar el constructor de la clase intacto he irnos por crear un método solo para esto.

namespace PruebaForms

{

public partial class Form2 : Form

{

// Creamos las variables donde almacenaremos los valores a recibir

 

public string NombreApellidos { get; set; }

public string Pensamiento { get; set; }

public string Color { get; set; }

 

public Form2()

{

InitializeComponent();

 

}

 

public void Metodo(string nombreCompleto, string pensamiento, string color)

{

 

NombreApellidos = nombreCompleto;

Pensamiento = pensamiento;

Color = color;

 

}

 

private void Form2_Load(object sender, System.EventArgs e)

{

labelResultado.Text = "El Usuario " + NombreApellidos + " le gusta el color " + Color + " y piensa que " + Pensamiento;

}

 

 

}

}

 

Y en el botón del form1 tendríamos que llamar al método o hacer lo mismo que en el ejemplo 1.

private void buttonAceptar_Click(object sender, EventArgs e)

{

Form2 form2 = new Form2();

form2.Metodo(textBoxNombre.Text + " " + textBoxApellidos.Text, textBoxPensamiento.Text,comboBoxColor.Text);

Hide();

form2.Show();

}

 

 

Con cualquiera de estas formas el resultado sería el mismo

Form2

Nota: Solo aclarar que en el caso del ejemplo utilicé solo variables con atributos primitivos (string, int, etc.) pero pueden ser  clases, listas, lo que ustedes necesiten.

Saludos

Anuncios