Este es mi primer programita en C#, y la verdad no entiendo muchas cosas. Espero me puedan echar un cable Por cierto, uso Visual Studio Express 2013, que está muy bonita xD
El programita es sencillo, solo registrará los datos de un trabajador en una tabla. Tengo las siguientes clases:
- Clase Trabajador (pojo). Este será el prototipo del trabajador, todos se crearán a partir de esta pojo.
- Clase MainWindow (Formulario)
- Clase Controller (Controlador del programa)
- Clase RegistrarTrabajador (Modelo del programa)
- Clase Conexion (Complemento del Modelo).
La idea es sencilla, estoy utilizando el patrón MVC, para conectar el Controlador con la vista y con el modelo. Ahora, el problema que tengo es el siguiente:
En Java, basta con pasarse la referencia del Controlador, al componente que efectuará el evento. bastaría con hacer:
Código
Luego, en la clase Controller:
public void setControlador(Controller controlador) { btnRegistrar.addActionListener(controlador); btnNuevo.addActionListener(controlador); btnSalir.addActionListener(controlador); }
Código
private Formulario vista; private Modelo modelo; public Controller (Formulario vista, Modelo modelo) { this.vista = vista; this.modelo = modelo; } @Override { // eventos } }
¿Cómo puedo lograr lo mismo en C#?
Clases Trabajador (Pojo), Controller (Controlador), RegistrarTrabajador (Modelo), Formulario :
Código
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace RegistroDeUsuarios.pojo { public class Trabajador { private string primerNombre; private string segundoNombre; private string primerApellido; private string segundoApellido; private string rangoTrabajador; private string fechaNacimiento; // setters public void setPrimerNombre(string primerNombre) { this.primerNombre = primerNombre; } public void setSegundoNombre(string segundoNombre) { this.segundoNombre = segundoNombre; } public void setPrimerApellido(string primerApellido) { this.primerApellido = primerApellido; } public void setSegundoApellido(string segundoApellido) { this.segundoApellido = segundoApellido; } public void setRangoTrabajador(string rangoTrabajador) { this.rangoTrabajador = rangoTrabajador; } public void setFechaNacimiento(string fechaNacimiento) { this.fechaNacimiento = fechaNacimiento; } // getters public string getPrimerNombre() { return this.primerNombre; } public string getSegundoNombre() { return this.segundoNombre; } public string getPrimerApellido() { return this.primerApellido; } public string getSegundoApellido() { return this.segundoApellido; } public string getRangoTrabajador() { return this.rangoTrabajador; } public string getFechaNacimiento() { return this.fechaNacimiento; } } }
Clase Controller
Código
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using RegistroDeUsuarios.pojo; namespace RegistroDeUsuarios { public class Controller { private MainWindow vista; private RegistrarTrabajador modelo; public Controller() { } public Controller(MainWindow vista, RegistrarTrabajador modelo) { this.vista = vista; this.modelo = modelo; } public void btnRegistrar_Click(Object sender, RoutedEventArgs e) { trabajador.setPrimerNombre(vista.txtPrimerNombre.Text); trabajador.setSegundoNombre(vista.txtSegundoNombre.Text); trabajador.setPrimerApellido(vista.txtPrimerApellido.Text); trabajador.setSegundoApellido(vista.txtSegundoApellido.Text); trabajador.setRangoTrabajador(vista.cboRangoTrabajador.SelectedItem.ToString()); trabajador.setFechaNacimiento(vista.txtFechaNacimiento.Text); modelo.registrarTrabajador(trabajador); } public void btnNuevo_Click(Object sender, RoutedEventArgs e) { vista.clean(); } public void btnSalir_Click(Object sender, RoutedEventArgs e) { //Application.Current.Shutdown(); } } }
Clase RegistrarTrabajador:
Código
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MySql.Data.MySqlClient; using RegistroDeUsuarios.pojo; namespace RegistroDeUsuarios { public class RegistrarTrabajador { public static string CadenaDeConexion; public void registrarTrabajador(Trabajador trabajador) { // Aquí se llevara a cabo la conexion CadenaDeConexion = "Server=localhost;" + "Port=3307;" + "Database=mysql_ifxperu;" + "Uid=root;" + "Password="; try { conexion.ConnectionString = CadenaDeConexion; } catch (Exception ex) { Console.WriteLine(ex.Message); } try { // Abrimos la conexión conexion.Open(); // Definimos nuestro Query string query = "insert into empleados VALUES('"+trabajador.getPrimerNombre()+"','"+trabajador.getSegundoNombre()+"','"+trabajador.getSegundoApellido()+"','"+ trabajador.getSegundoApellido()+"','"+trabajador.getRangoTrabajador()+"','"+trabajador.getFechaNacimiento()+"')"; // Establecemos cuál será la conexión comando.Connection = conexion; // Determinamos el comando [ nuestro query] comando.CommandText = query; //Se le asigna la consulta // Asignamos al objeto MySqlReader la ejecución del comando // En otras palabras, el resultado de la consulta [query] // Se guardará en el MySqlReader comando.ExecuteNonQuery(); MessageBox.Show("Alta del empleado satisfactoria."); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { conexion.Close(); } } } }
Clase Formulario
Código
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace RegistroDeUsuarios { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); cboRangoTrabajador.Items.Add("Administrador"); cboRangoTrabajador.Items.Add("Vendedor"); cboRangoTrabajador.Items.Add("Contador"); cboRangoTrabajador.Items.Add("Tecnico Mantenimiento"); cboRangoTrabajador.Items.Add("Programador"); cboRangoTrabajador.Items.Add("Analista"); cboRangoTrabajador.SelectedIndex = 0; } public void setControlador(Controller controlador) { } public void clean() { txtPrimerNombre.Clear(); txtSegundoNombre.Clear(); txtPrimerApellido.Clear(); txtSegundoApellido.Clear(); txtFechaNacimiento.Clear(); cboRangoTrabajador.SelectedItem = "Administrador"; txtPrimerNombre.Focus(); } } }
*** UPDATE ***
He creado una clase principal, que sustituye al Main que genera WPF.
Código
using System.Windows.Media.Imaging; using System.Windows.Media.Media3D; using System.Windows.Media.TextFormatting; using System.Windows.Navigation; using System.Windows.Shapes; using System.Windows.Shell; namespace RegistroDeUsuarios { class Principal { // <summary> /// Application Entry Point. /// </summary> [System.STAThreadAttribute()] [System.Diagnostics.DebuggerNonUserCodeAttribute()] public static void Main() { vista.setControlador(control); MessageBox.Show("Hola"); app.InitializeComponent(); app.Run(); } } }
Otra duda, quiero colocar un método en el Formulario, para arrancar la aplicación a demanda. Esto porque en el Main crearé los objetos MainWindow y RegistrarTrabajador, para pasárselos al Controller, para que se asocie a las 2 clases, y el objeto Controller pasárselo por medio de setControlador(Controller controlador) al Formulario. ¿Cómo haría?
Muchas gracias!