none
Conservar posiciones de botones creados en ejecucion.

    Pregunta

  • Hola amigos.

    Estoy intentando que botones creados en tiempo de ejecucion, conserven la posicion cuando se cierra el programa.

    He conseguido hacerlo (con My.Settings.controlLocations) y es relativamente facil, pero solo si los botones los arrastros de la caja de herramientas, osea sin son "reales". Grabo la posicion al salir y ya lo tengo.

    Pero esto me limita a un numero   de controles que tengo que decidir yo, y  no es lo que quiero, pues la idea es que el usuario decida el numero y se creen en tiempo de ejecucion, los situe donde le plazca y al salir queden grabadas las posiciones  con My.Settings.controlLocations o como sea. 

    Imagino que los botones creados en ejecucion son "virtuales", y se esfuman al salir.

    Repito que con botones arrastrados de la caja de herramientas ya lo tengo y funciona perfectamente:

    Meto 40 botones el el formulario con visible=false, pregunto al usuario cuantos quiere y se hacen visibles

    Luego el usuario los mueve por el formulario a su antojo y al salir graba las posiciones de cada uno con My.Settings.controlLocations

    Al vorver a entrar cada boton esta en su sitio,  pero considero que es una chapuza que me gustaria superar.

    Espero haberme explicado.

    Gracias y larga vida al foro

    sábado, 10 de diciembre de 2016 1:37

Respuestas

  • Veo que estás haciendo una distinción entre "botones creados en tiempo de ejecucion" y "botones arrastrados de la caja de herramientas". No sé si eres consciente de que los botones arrastrados de la caja de herramientas también son creados en tiempo de ejecución. Lo que hace Visual Studio cuando los arrastras es que escribe código fuente dentro de la subrutina InitializeComponent para crear esos botones en tiempo de ejecución. Y la subrutina en cuestión la llama desde el constructor del formulario. Por lo tanto, al ejecutar el programa, lo que hace es crear esos controles en tiempo de ejecución. Si añades código para crear tú mismo los botones, y ejecutas ese código al abrir el formulario, no existe absolutamente ninguna diferencia entre los botones que has creado tú y los que ha creado el InitializeComponent. En ambos casos es un código similar. O debería ser un código similar, a no ser que hayas cometido algún error en la creación de los botones o en el punto del programa en el que la llamas. Siempre puedes examinar el contenido del InitializeComponent y ver qué es lo que ha escrito Visual Studio.

    En consecuencia, si lo de salvar el Location te funciona con los botones pintados en tiempo de diseño y no te funciona con los creados por ti en tiempo de ejecución, tiene que haber un error en tu código, ya que el sistema no tiene ninguna forma de distinguir los unos de los otros. Para él son idénticos.

    Revisa cuál es el momento en el que los creas, el momento en el que los salvas, y el momento en el que los restauras, que debe haber algún error en la secuencia en la que lo haces (o mal elegido el evento) de forma que los debes estar salvando o restaurando antes o después de lo que debes.

    sábado, 10 de diciembre de 2016 16:44

Todas las respuestas

  • Veo que estás haciendo una distinción entre "botones creados en tiempo de ejecucion" y "botones arrastrados de la caja de herramientas". No sé si eres consciente de que los botones arrastrados de la caja de herramientas también son creados en tiempo de ejecución. Lo que hace Visual Studio cuando los arrastras es que escribe código fuente dentro de la subrutina InitializeComponent para crear esos botones en tiempo de ejecución. Y la subrutina en cuestión la llama desde el constructor del formulario. Por lo tanto, al ejecutar el programa, lo que hace es crear esos controles en tiempo de ejecución. Si añades código para crear tú mismo los botones, y ejecutas ese código al abrir el formulario, no existe absolutamente ninguna diferencia entre los botones que has creado tú y los que ha creado el InitializeComponent. En ambos casos es un código similar. O debería ser un código similar, a no ser que hayas cometido algún error en la creación de los botones o en el punto del programa en el que la llamas. Siempre puedes examinar el contenido del InitializeComponent y ver qué es lo que ha escrito Visual Studio.

    En consecuencia, si lo de salvar el Location te funciona con los botones pintados en tiempo de diseño y no te funciona con los creados por ti en tiempo de ejecución, tiene que haber un error en tu código, ya que el sistema no tiene ninguna forma de distinguir los unos de los otros. Para él son idénticos.

    Revisa cuál es el momento en el que los creas, el momento en el que los salvas, y el momento en el que los restauras, que debe haber algún error en la secuencia en la que lo haces (o mal elegido el evento) de forma que los debes estar salvando o restaurando antes o después de lo que debes.

    sábado, 10 de diciembre de 2016 16:44
  • Gracias Alberto por contestar y por tus acertados apuntes que desconocia.

    Se trataba de un error mas "sutil", pues trataba de posicionar los botones  identificandolos por el nombre cuando en realidad debia hacerlo por el texto. Ya funciona y puedo poner el numero de mesas que quiera, posicionarlas a mi gusto y guardar el diseño. Si te apetece echarle un vistazo al  codigo

    Gracias y hasta siempre

    • Propuesto como respuesta Willams Morales domingo, 11 de diciembre de 2016 2:39
    domingo, 11 de diciembre de 2016 1:32