elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  [WPF][C#] Programar los eventos en una clase Controladora.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [WPF][C#] Programar los eventos en una clase Controladora.  (Leído 2,468 veces)
Mitsu

Desconectado Desconectado

Mensajes: 259



Ver Perfil WWW
[WPF][C#] Programar los eventos en una clase Controladora.
« en: 22 Octubre 2013, 19:49 pm »

Buen día.

Este es mi primer programita en C#, y la verdad no entiendo muchas cosas. Espero me puedan echar un cable  :xD 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
  1. public void setControlador(Controller controlador)
  2. {
  3.    btnRegistrar.addActionListener(controlador);
  4.    btnNuevo.addActionListener(controlador);
  5.    btnSalir.addActionListener(controlador);
  6.  }
  7.  
Luego, en la clase Controller:

Código
  1.  
  2. public class Controller implements ActionListener {
  3.  
  4. private Formulario vista;
  5. private Modelo modelo;
  6.  
  7.  public Controller (Formulario vista, Modelo modelo)
  8.   {
  9.      this.vista = vista;
  10.      this.modelo = modelo;
  11.   }
  12.  
  13. @Override
  14.  actionPerformed(ActionEvent e)
  15.   {
  16.      // eventos
  17.   }
  18.  
  19. }
  20.  


¿Cómo puedo lograr lo mismo en C#?


Clases Trabajador (Pojo), Controller (Controlador), RegistrarTrabajador (Modelo), Formulario :

Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace RegistroDeUsuarios.pojo
  8. {
  9.    public class Trabajador
  10.    {
  11.        private string primerNombre;
  12.        private string segundoNombre;
  13.        private string primerApellido;
  14.        private string segundoApellido;
  15.        private string rangoTrabajador;
  16.        private string fechaNacimiento;
  17.  
  18.        // setters
  19.  
  20.        public void setPrimerNombre(string primerNombre)
  21.        {
  22.            this.primerNombre = primerNombre;
  23.        }
  24.        public void setSegundoNombre(string segundoNombre)
  25.        {
  26.            this.segundoNombre = segundoNombre;
  27.        }
  28.        public void setPrimerApellido(string primerApellido)
  29.        {
  30.            this.primerApellido = primerApellido;
  31.        }
  32.        public void setSegundoApellido(string segundoApellido)
  33.        {
  34.            this.segundoApellido = segundoApellido;
  35.        }
  36.        public void setRangoTrabajador(string rangoTrabajador)
  37.        {
  38.            this.rangoTrabajador = rangoTrabajador;
  39.        }
  40.        public void setFechaNacimiento(string fechaNacimiento)
  41.        {
  42.            this.fechaNacimiento = fechaNacimiento;
  43.        }
  44.  
  45.        // getters
  46.  
  47.        public string getPrimerNombre()
  48.        {
  49.            return this.primerNombre;
  50.        }
  51.        public string getSegundoNombre()
  52.        {
  53.            return this.segundoNombre;
  54.        }
  55.        public string getPrimerApellido()
  56.        {
  57.            return this.primerApellido;
  58.        }
  59.        public string getSegundoApellido()
  60.        {
  61.            return this.segundoApellido;
  62.        }
  63.        public string getRangoTrabajador()
  64.        {
  65.            return this.rangoTrabajador;
  66.        }
  67.        public string getFechaNacimiento()
  68.        {
  69.            return this.fechaNacimiento;
  70.        }
  71.  
  72.    }
  73. }
  74.  

Clase Controller
Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Windows;
  7. using RegistroDeUsuarios.pojo;
  8.  
  9.  
  10. namespace RegistroDeUsuarios
  11. {
  12.  
  13.   public class Controller
  14.    {
  15.        private MainWindow vista;
  16.        private RegistrarTrabajador modelo;
  17.  
  18.  
  19.       public Controller()
  20.        {
  21.  
  22.        }
  23.        public Controller(MainWindow vista, RegistrarTrabajador modelo)
  24.        {
  25.            this.vista = vista;
  26.            this.modelo = modelo;
  27.  
  28.        }
  29.  
  30.  
  31.       public void btnRegistrar_Click(Object sender, RoutedEventArgs e)
  32.       {
  33.           Trabajador trabajador = new Trabajador();
  34.           trabajador.setPrimerNombre(vista.txtPrimerNombre.Text);
  35.           trabajador.setSegundoNombre(vista.txtSegundoNombre.Text);
  36.           trabajador.setPrimerApellido(vista.txtPrimerApellido.Text);
  37.           trabajador.setSegundoApellido(vista.txtSegundoApellido.Text);
  38.           trabajador.setRangoTrabajador(vista.cboRangoTrabajador.SelectedItem.ToString());
  39.           trabajador.setFechaNacimiento(vista.txtFechaNacimiento.Text);
  40.           modelo.registrarTrabajador(trabajador);
  41.       }
  42.       public void btnNuevo_Click(Object sender, RoutedEventArgs e)
  43.       {
  44.           vista.clean();
  45.       }
  46.       public void btnSalir_Click(Object sender, RoutedEventArgs e)
  47.       {
  48.           //Application.Current.Shutdown();
  49.       }
  50.    }
  51. }
  52.  


Clase RegistrarTrabajador:
Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using MySql.Data.MySqlClient;
  7. using RegistroDeUsuarios.pojo;
  8.  
  9. namespace RegistroDeUsuarios
  10. {
  11.    public class RegistrarTrabajador
  12.    {
  13.        public static MySqlConnection conexion = new MySqlConnection();
  14.        public static MySqlCommand comando = new MySqlCommand();
  15.        public static string CadenaDeConexion;
  16.  
  17.        public void registrarTrabajador(Trabajador trabajador)
  18.        {
  19.            // Aquí se llevara a cabo la conexion
  20.            CadenaDeConexion = "Server=localhost;"
  21.                                + "Port=3307;"
  22.                                + "Database=mysql_ifxperu;"
  23.                                + "Uid=root;"
  24.                                + "Password=";
  25.  
  26.            try
  27.            {
  28.                conexion.ConnectionString = CadenaDeConexion;
  29.            }
  30.            catch (Exception ex)
  31.            {
  32.                Console.WriteLine(ex.Message);
  33.            }
  34.  
  35.            try
  36.            {
  37.                // Abrimos la conexión
  38.                conexion.Open();
  39.                // Definimos nuestro Query
  40.                string query = "insert into empleados VALUES('"+trabajador.getPrimerNombre()+"','"+trabajador.getSegundoNombre()+"','"+trabajador.getSegundoApellido()+"','"+
  41.                    trabajador.getSegundoApellido()+"','"+trabajador.getRangoTrabajador()+"','"+trabajador.getFechaNacimiento()+"')";
  42.                // Establecemos cuál será la conexión
  43.                comando.Connection = conexion;
  44.                // Determinamos el comando [ nuestro query]
  45.                comando.CommandText = query; //Se le asigna la consulta
  46.                // Asignamos al objeto MySqlReader la ejecución del comando
  47.                // En otras palabras, el resultado de la consulta [query]
  48.                // Se guardará en el MySqlReader
  49.                comando.ExecuteNonQuery();
  50.                MessageBox.Show("Alta del empleado satisfactoria.");
  51.            }
  52.            catch (Exception ex)
  53.            {
  54.                Console.WriteLine(ex.Message);
  55.            }
  56.            finally {
  57.                conexion.Close();
  58.            }
  59.        }
  60.    }
  61. }
  62.  


Clase Formulario
Código
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Windows;
  7. using System.Windows.Controls;
  8. using System.Windows.Data;
  9. using System.Windows.Documents;
  10. using System.Windows.Input;
  11. using System.Windows.Media;
  12. using System.Windows.Media.Imaging;
  13. using System.Windows.Navigation;
  14. using System.Windows.Shapes;
  15.  
  16. namespace RegistroDeUsuarios
  17. {
  18.  
  19.    public partial class MainWindow : Window
  20.    {
  21.        public MainWindow()
  22.        {
  23.            InitializeComponent();
  24.            cboRangoTrabajador.Items.Add("Administrador");
  25.            cboRangoTrabajador.Items.Add("Vendedor");
  26.            cboRangoTrabajador.Items.Add("Contador");
  27.            cboRangoTrabajador.Items.Add("Tecnico Mantenimiento");
  28.            cboRangoTrabajador.Items.Add("Programador");
  29.            cboRangoTrabajador.Items.Add("Analista");
  30.            cboRangoTrabajador.SelectedIndex = 0;
  31.        }
  32.  
  33.        public void setControlador(Controller controlador)
  34.        {
  35.            controlador.btnRegistrar_Click(controlador,new RoutedEventArgs());
  36.            controlador.btnNuevo_Click(controlador,new RoutedEventArgs());
  37.            controlador.btnSalir_Click(controlador,new RoutedEventArgs());
  38.        }
  39.  
  40.        public void clean()
  41.        {
  42.            txtPrimerNombre.Clear();
  43.            txtSegundoNombre.Clear();
  44.            txtPrimerApellido.Clear();
  45.            txtSegundoApellido.Clear();
  46.            txtFechaNacimiento.Clear();
  47.            cboRangoTrabajador.SelectedItem = "Administrador";
  48.            txtPrimerNombre.Focus();
  49.        }
  50.  
  51.  
  52.    }
  53. }
  54.  


*** UPDATE ***

He creado una clase principal, que sustituye al Main que genera WPF.

Código
  1. using System.Windows.Media.Imaging;
  2. using System.Windows.Media.Media3D;
  3. using System.Windows.Media.TextFormatting;
  4. using System.Windows.Navigation;
  5. using System.Windows.Shapes;
  6. using System.Windows.Shell;
  7.  
  8. namespace RegistroDeUsuarios
  9. {
  10.    class Principal
  11.    {
  12.        // <summary>
  13.        /// Application Entry Point.
  14.        /// </summary>
  15.        [System.STAThreadAttribute()]
  16.        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
  17.        public static void Main()
  18.        {
  19.  
  20.            MainWindow vista = new MainWindow();
  21.            RegistrarTrabajador modelo = new RegistrarTrabajador();
  22.            Controller control = new Controller(vista, modelo);
  23.            vista.setControlador(control);
  24.            MessageBox.Show("Hola");
  25.            RegistroDeUsuarios.App app = new RegistroDeUsuarios.App();
  26.            app.InitializeComponent();
  27.            app.Run();
  28.        }
  29.  
  30.    }
  31. }
  32.  


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!


« Última modificación: 23 Octubre 2013, 00:34 am por IWannaKillYou » En línea

Mitsu

Desconectado Desconectado

Mensajes: 259



Ver Perfil WWW
Re: [WPF][C#] Programar los eventos en una clase Controladora.
« Respuesta #1 en: 23 Octubre 2013, 01:26 am »

Me autorespondo. En C# no existe el patrón MVC, se usa MVVM y DataBinding. C# me parece un lenguaje muy moderno y completo, voy a seguir estudándolo.


Saludos weys.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines