Saltar al contenido principal

 none
Acceder a objetos que se encuntran en un form desde una clase c# RRS feed

  • Pregunta

  • Buenas tengo un form con un grid y varios tebox y botones me gustaria accederlos desde una clase de C# para realizarlo en programacion por capas, noc como llamrlos desde la clase!!! Gracias
    sábado, 13 de octubre de 2012 21:16

Respuestas

  • en una arquitectura en capas salvo la de presentacion el resto nunca accedea los controles de forma directa, si acceden a la informacion que la capa anterior les proporciona

    [N-Tier] – Desarrollo en capas - Ejemplo Facturacion - parte 3

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    lunes, 15 de octubre de 2012 6:51
  • Buenas tengo un form con un grid y varios tebox y botones me gustaria accederlos desde una clase de C# para realizarlo en programacion por capas, noc como llamrlos desde la clase!!! Gracias

    Recuerda que el formulario no es único, sino que en principio se podría instanciar varias veces, y habría en pantalla varios formularios iguales cada uno de ellos con una copia del grid, los textboxes y los botones. Para que la clase pueda acceder a esos contenidos, es necesario indicarle a la clase cuál de las instancias del formulario tiene que manejar. Aunque tú sepas que sólo has abierto una instancia, el compilador no lo sabe, hay que pasarle una referencia a esa instancia. Para ello, tienes que guardarte la variable que usas cuando abres el formulario. Por ejemplo, si lo abres así:

    Form1 frm = new Form1();

    frm.Show();

    entonces la variable "frm" tienes que hacérsela llegar a la clase. Por ejemplo, puedes pasársela como argumento al constructor cuando instancies la clase.

    Una vez que la clase dispone de esa veriable, puede acceder a los contenidos usando frm.textBox1, frm.button1, etc. Recuerda marcar esos textboxes, botones, etc., como "public" (o "internal" si el formulario se compila en el mismo ensamblado que la clase), para que esto funcione.

    Editado: Y agregando a lo que dicen Jose y Leandro, una clase utilizada de la manera anterior no sería "programación por capas". Aunque es legítimo que utilices una clase auxiliar en la que se delega la manipulación de ciertos controles de la pantalla, esa clase seguiría formando parte de la capa de interfaz de usuario; si la clase pretendes que forme parte de la capa de negocio, entonces no debería acceder a los controles de la pantalla.


    lunes, 15 de octubre de 2012 19:15
    Moderador

Todas las respuestas

  • Eso no es correcto en programación por capas.   La capa de negocio que es la que brinda la información y funciones a la capa de presentación (su formulario) no tiene por qué saber que los datos se presentarán en un formulario.  O sea, la capa de negocios provee información que es agnóstica a su forma de presentación, que puede ser WPF, Windows Forms, web, ninguna (podría ser un web service), etc.


    Jose R. MCP
    Code Samples

    sábado, 13 de octubre de 2012 21:31
    Moderador
  • en una arquitectura en capas salvo la de presentacion el resto nunca accedea los controles de forma directa, si acceden a la informacion que la capa anterior les proporciona

    [N-Tier] – Desarrollo en capas - Ejemplo Facturacion - parte 3

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    lunes, 15 de octubre de 2012 6:51
  • Buenas tengo un form con un grid y varios tebox y botones me gustaria accederlos desde una clase de C# para realizarlo en programacion por capas, noc como llamrlos desde la clase!!! Gracias

    Recuerda que el formulario no es único, sino que en principio se podría instanciar varias veces, y habría en pantalla varios formularios iguales cada uno de ellos con una copia del grid, los textboxes y los botones. Para que la clase pueda acceder a esos contenidos, es necesario indicarle a la clase cuál de las instancias del formulario tiene que manejar. Aunque tú sepas que sólo has abierto una instancia, el compilador no lo sabe, hay que pasarle una referencia a esa instancia. Para ello, tienes que guardarte la variable que usas cuando abres el formulario. Por ejemplo, si lo abres así:

    Form1 frm = new Form1();

    frm.Show();

    entonces la variable "frm" tienes que hacérsela llegar a la clase. Por ejemplo, puedes pasársela como argumento al constructor cuando instancies la clase.

    Una vez que la clase dispone de esa veriable, puede acceder a los contenidos usando frm.textBox1, frm.button1, etc. Recuerda marcar esos textboxes, botones, etc., como "public" (o "internal" si el formulario se compila en el mismo ensamblado que la clase), para que esto funcione.

    Editado: Y agregando a lo que dicen Jose y Leandro, una clase utilizada de la manera anterior no sería "programación por capas". Aunque es legítimo que utilices una clase auxiliar en la que se delega la manipulación de ciertos controles de la pantalla, esa clase seguiría formando parte de la capa de interfaz de usuario; si la clase pretendes que forme parte de la capa de negocio, entonces no debería acceder a los controles de la pantalla.


    lunes, 15 de octubre de 2012 19:15
    Moderador
  • ok, yo intento hacer algo similar, pero con reportes, es decir, desde un menu en un form padre quiero llamar al reporte, por ejemplo supongamos que tengo tres opciones en el menu, reporte de clientes, reporte de productos y reporte de ventas, y dependiendo de la opcion que se seleccione en el menu llame a su respectivo metodo o proceso en una clase, cada metodo cargaria el reporte que necesito en un reportviewer con sus respectivos datos, el problema es que el objeto reportviewer1 que esta en el form_vista_previa no esta accesible ni aun instanciadolo, por ejemplo lo que quiero hacer es algo como esto:

    form_vista_previa frm = new form_vista_previa();

    frm.reportViewer1.LocalReport.ReportPath = "mi_archivo_de_reporte.rdcl"

    pero, el objeto no es accesible, como puedo acceder a el para configurar sus propieades??

    sorry soy nuevo en c , con vb no tengo esos problemas

    viernes, 5 de julio de 2013 1:03