none
Como organizar controles de distinta clase en diferentes SUB, dentro de un modulo, para luego desde otra SUB modificar sus propiedades RRS feed

  • Pregunta

  • Estimados Señores saludos

    Por favor ruego me puedan ayudar, estoy haciendo una aplicación en Vb.net., deseo dar la oportunidad al usuario de escoger un tema de color de tres presentados. lo quiero hacer de forma modular de tal forma de tener organizado los controles de los formularios en difrentes SuB dentro del un modulo de tal forma que desde otra sub se pueda cambiar sus propiedades, cuando el usuario esgoja un tema de color. Lo que no puedo hacer es organizar esos controles dentro de una SUb. Agradeceria mucho su ayuda

    domingo, 5 de enero de 2020 18:05

Respuestas

  • Los controles se generan siempre dentro de una Sub. Concretamente, la Sub se llama InitializeComponent, y puedes encontrar la llamada dentro del constructor (Sub New) del Form que contiene los controles. El contenido se genera automáticamente cuando editas el Form desde el diseñador, pero si quieres, puedes examinar su contenido entrando con la F12.

    El resultado de ejecutar la Sub es que los controles se instancian y se añaden a la colección Controls del formulario. A partir de ahí, si quieres modificar algún control, tienes que buscarlo en esa misma colección Controls. No vale con que escribas una Sub que vuelva a crear una nueva instancia del control con distintas características, porque esa nueva instancia no se vería en el formulario; la que se ve es la que está en Controls. Desde luego, puedes quitar y añadir controles en la colección Controls, pero tienes que saber cuál es el que quitas y añadir el nuevo exactamente en su lugar (y reconectarle todos los manejadores de eventos si es que los tuviera).

    Para lo que quieres hacer, que es cambiar el tema de color, no te recomiendo que quites y agregues controles. En su lugar, cambia el color de los que ya existen. Si lo quieres hacer desde un Sub en un Módulo, pásale como argumento al Sub la colección Controls (sería Me.Controls si la pasas desde el propio form que la contiene) y dentro del Sub recórrela con un ForEach y por cada control cámbiale los colores según proceda.

    • Propuesto como respuesta Diana AcuñaModerator lunes, 6 de enero de 2020 16:42
    • Marcado como respuesta Anben jueves, 9 de enero de 2020 12:40
    lunes, 6 de enero de 2020 9:03
  • En lugar del evento Load, pon tu cambio de colores dentro del Sub New, después de la llamada a InitializeComponent. De esta manera saldrán directamente con el color ya cambiado.

    • Marcado como respuesta Anben jueves, 9 de enero de 2020 12:41
    miércoles, 8 de enero de 2020 18:37

Todas las respuestas

  • Los controles se generan siempre dentro de una Sub. Concretamente, la Sub se llama InitializeComponent, y puedes encontrar la llamada dentro del constructor (Sub New) del Form que contiene los controles. El contenido se genera automáticamente cuando editas el Form desde el diseñador, pero si quieres, puedes examinar su contenido entrando con la F12.

    El resultado de ejecutar la Sub es que los controles se instancian y se añaden a la colección Controls del formulario. A partir de ahí, si quieres modificar algún control, tienes que buscarlo en esa misma colección Controls. No vale con que escribas una Sub que vuelva a crear una nueva instancia del control con distintas características, porque esa nueva instancia no se vería en el formulario; la que se ve es la que está en Controls. Desde luego, puedes quitar y añadir controles en la colección Controls, pero tienes que saber cuál es el que quitas y añadir el nuevo exactamente en su lugar (y reconectarle todos los manejadores de eventos si es que los tuviera).

    Para lo que quieres hacer, que es cambiar el tema de color, no te recomiendo que quites y agregues controles. En su lugar, cambia el color de los que ya existen. Si lo quieres hacer desde un Sub en un Módulo, pásale como argumento al Sub la colección Controls (sería Me.Controls si la pasas desde el propio form que la contiene) y dentro del Sub recórrela con un ForEach y por cada control cámbiale los colores según proceda.

    • Propuesto como respuesta Diana AcuñaModerator lunes, 6 de enero de 2020 16:42
    • Marcado como respuesta Anben jueves, 9 de enero de 2020 12:40
    lunes, 6 de enero de 2020 9:03
  • Saludos y mucha gracias por la pronta respuesta a mi inquietud, me parece excelente lo que me dices y he realizado lo explicado en el último parrado y todo bien.

    Pero se me presento un problema y lo explico: El formulario en modo de diseño lo hice con uno de los tres colores que pienso proponer al usuario. Cuando envio la coleccción Me.Controls a un For each para que se de los cambios a los dos colores restantes, desde luego uno a la vez, resulta que al iniciar el formulario en otro color siempre empieza mostrando el color primero con que lo hice en modo diseño y luego muestra el nuevo color. Pues tengo puesto en el evento Load del formulario la sentencia para que cambie de color. Por favor donde estoy cometiendo el error o como se debe hacer. Gracias

    miércoles, 8 de enero de 2020 13:46
  • En lugar del evento Load, pon tu cambio de colores dentro del Sub New, después de la llamada a InitializeComponent. De esta manera saldrán directamente con el color ya cambiado.

    • Marcado como respuesta Anben jueves, 9 de enero de 2020 12:41
    miércoles, 8 de enero de 2020 18:37
  • Saludos te agradezco mucho todo funciona muy bien
    jueves, 9 de enero de 2020 12:42