none
Editar propiedades de controles dentro de un UserControl desde un formulario. RRS feed

  • Pregunta

  • En un 'Formulario' tengo un 'Panel', en el agrego un 'Control de Usuario' con el siguiente código':

    Control prod = (Control)Page.LoadControl("Prod.ascx"); //Instancia del 'Control de Usuario'
    pnlProds.Controls.Add(prod); //Agrego el control de usuario al 'Panel'

    La instancia la agrega al panel a la hora de ejecutarlo. Dentro del 'Control de Usuario' tengo unos 'Label' a los cuales les quiero cambiar el texto al instanciar el 'Control de Usuario' con algún código cono el siguiente:

    Control prod = (Control)Page.LoadControl("Prod.ascx"); //Instancia del 'Control de Usuario'

    prod.lblId.Texto = "1024"; //Código para cambiar el valor de un 'Label' dentro del 'Control de Usuario'

    pnlProds.Controls.Add(prod); //Agrego el control de usuario al 'Panel'

    Ese código o esa manera de hacerlo no funciona, y quiero saber si alguien puede ayudarme a solucionar este problema. Si alguien sabe la respuesta, agradecería mucho. Buen día.

    martes, 17 de noviembre de 2020 23:15

Todas las respuestas

  • Hola Sergio Velasco, 

      

    Gracias por levantar tu consulta en los foros de MSDN. Entendimos su pregunta y vamos a darle seguimiento para buscar la mejor repuesta pertinente al caso.  

    Gracias por usar los foros de MSDN.   

     

     Andres Aguilar

     ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN sientase en la libertad de contactar  MSDNFSF@microsoft.com. 

    miércoles, 18 de noviembre de 2020 14:09
    Moderador
  • La idea es que el control de usuario "encapsula" su contenido haciéndolo invisible desde el exterior. Eso te permite reorganizar el diseño interno del control de usuario sin que se "rompa" el programa que lo contiene. Es el mismo principio de encapsulación que cuando creas una clase y dentro tiene propiedades privadas. Eso te permite cambiar todo lo que sea privado dentro de la clase sin afectar a cualquier código que use la clase. Es un principio importante en programación.

    En otras palabras, si no quieres violar este principio, no debes acceder a los labels internos del UserControl.

    Entonces, ¿cómo se hace? Pues en el User control pones propiedades públicas con su Get y Set. Y dentro del Get y el Set, trasladas el valor de la propiedad al objeto que quieras, en este caso al Label. Desde fuera del control, lo que haces es cambiar el valor de la propiedad pública. Y dentro del control, la propiedad cambia el label. Si algún día decides quitar el label y en su lugar poner (por ejemplo) un span, entonces cambiarías la propiedad para que cambie el texto del Span. Y eso sería puramente interno al control, desde fuera las páginas que utilizasen el control no notarían ningún cambio.

    miércoles, 18 de noviembre de 2020 16:47