Aadir boton a una ventana por codigo

Buenas tardes a todos, estoy trasteando un poco con xojo y no encuentro la manera de aadir un boton a una ventana desde codigo, me explico.

Tengo una ventana que creo
Dim w as new Window

w.Title = “prueba” // esto ok
w.CloseButton = True // esto no funciona

Dim b as new PushButton
b.Caption = “Aceptar”

// Como aado este boton a la window

w.Show

Gracias
Isaac Daz

https://forum.xojo.com/3660-creating-lots-of-buttons-using-code/0

Gracias Nicolas por tu respuesta,
pero viendo un poco ese enlace entiendo que hay que crear un container hasta ahi bien, y puedo aadir ese container a la window principal, pero sigo con el mismo problema. Como aado un boton por codigo al contenedor??
Yo lo que necesito es que cuando creo por codigo el contenedor ir aadiendo botones y demas por codigo, no arrastrando controles al contenedor.

Voy a seguir peleandome a ver si encuentro una solucin, pero supongo que esto le habr pasado a muchas personas anteriormente ya que en otros lenguajes de programacin esto es muy comn, crear botones por codigo.

Gracias
ISaac

Hola Isaac, yo estoy aprendiendo Xojo sin ser un programador. Entro al foro para ver ideas/problemas y tratar de resolverlos.

Por lo que he podido investigar, no veo una forma de poner un botn directamente. Por lo que entiendo del container tu lo defines con un botn (por ejemplo) y por cdigo lo agregas a tu ventana (contenedor con botn o con lo que quieras).

Tambin veo que puedes tener definidos los botones en la ventana y ponerlos como invisibles, ya con cdigo los puedes volver visibles. No se si te sirva esta opcin.

Saludos

Hola Isaac,

Hay dos maneras de hacerlo, pero en ambos casos necesitas preparar de antemano el botn:

1- Utilizar un control set: http://developer.xojo.com/userguide/desktop-control-sets
Necesitas crear un control set del botn que quieres aadir durante el diseo, y despus en tiempo de ejecucin puedes aadir tantas instancias del botn como quieras. Esos botones compartirn la lgica. Pero podras generar ms de un control set con diferentes lgicas, claro.

2- Usar un containercontrol en el que hayas puesto el botn que quieres aadir a tu ventana. En tiempo de ejecucin puedes hacer containercontrol1.embedwithin para aadirlo a una ventana: http://developer.xojo.com/containercontrol
Tambin usando el containercontrol tienes que prepararlo en el IDE, en tiempo de diseo.

El container control est pensado para aadir varios controles a la vez, ya que puede albergar muchos controles de distintos tipos, y no es lo que yo hara para un solo botn.

Julen

Gracias Julen por tu respuesta, me temia que podria pasar eso, que en tiempo de ejecucin no podria crear elementos :frowning: .Pues me toca meterme en este proyecto con otra herramienta.

Saludos,
Isaac

No es correcto que no puedas crearlos en tiempo de ejecucin. Lo que dira es que para crearlos en tiempo de ejecucin tienes haberlo previsto durante el diseo.

Xojo es una herramienta perfectamente capaz de aadir botones a tu UI en tiempo de ejecucin.

Te importara explicar con un poco ms de detalle qu quieres aadir a tu UI? Solo un botn? Distintos botones con distinta funcionalidad? Otros controles?

Julen

Buenos das,
antes de nada perdonar el tiempo en contestar.

La idea de esta aplicacin consiste en leer un fichero, txt, json, xml y en base a ese fichero, crear un boton, o una ventana o un textbox, y tambien leer metodos etc. Pero claro esto tiene que ser en tiempo de ejecucin. Se os ocurre alguna manera de hacerlo??

Gracias
Isaac

Generar los controles/ventanas según los datos leídos es posible usando control sets y container controls, como ya dije.

Leer un método (el código) en un fichero de texto es más complicado. Que yo sepa sólo se puede hacer usando XojoScript (https://documentation.xojo.com/index.php/XojoScript), y tiene limitaciones. Hay un ejemplo del uso de xojoscript para ejecutar código introducido en un textarea entre los ejemplos que vienen con xojo.

Si los métodos de esos controles están predefinidos sólo es cuestión de generar un control set para cada tipo de control (incluyendo los métodos concretos de cada control).

Julen

Tambin tienes ejemplos de cmo usar control sets y container controls entre los que vienen con xojo (dentro de desktop).

Hola,

He creado un artculo + vdeo dirigido a explicar como crear controles UI en tiempo de ejecucin. Espero que lo encontris de utilidad!

Javier

Hola a todos, revisando lo que comenta Julen me ayudo mucho a entender como realizar lo necesario para avanzar en mi proyecto, pero despues de ver el articulo de Javier, ya tengo perfectamente claro como crear controles en tiempo de ejecucin, esto es lo que necesitaba, ahora voy a investigar como poder leer de un fichero un mtodo y que el boton pueda ejecutarlo, o no se si al momento de crear el boton en tiempo de ejecucin pueda obtener ese mtodo para ejecutar posteriormente.

Lo que necesito basicamente es que en base un fichero enviado, mi aplicacin marco lea el fichero y coloque controles y metodos para utilizar posteriormente, es decir ocultar y mostrar controles con sus metodos en tiempo de ejecucin.

Gracias por vuestra ayuda.

Isaac

Hola Isaac,

Lo de incorporar “nuevos mtodos” no puedes hacerlo “tal cual”; podras hacer algo similar derivando lo que leyeses del archivo de entrada hacia los mtodos o funcionalidades previamente predefinidas por las clases de los objetos en cuestin (incluso usando delegados, por dotar de cierto dinamismo, si quieres)

Xojo no es un lenguaje de programacin dinmico sino de tipado fuertey dado que es compilado no puedes “crear” nuevos mtodos sobre la marcha.

Javier

Dependiendo de lo que tenga que hacer puede usar XojoScript. Isaac, ¿nos puedes describir qué tareas podrían realizar esos métodos?

Julen