Re: A Cerca De Controles En Distintos Formularios
De todas formas hay algo que conviene tener claro.
En
gambas por defecto los controles no son públicos y eso tiene una razón. No es nada conveniente usar controles públicos porque lleva a una programación mal estructurada.
¿Como solucionar eso?
Pues hay varias maneras. Te explico rápidamente como pasar parámetros de un formulario a otro
Crear un formulario y pasarle unos parámetros con los que tiene que operar
Supongamos que tengo un formulario con los datos de conexión. Son un conjunto de textboxes donde el uuario escribe lo que quiera y luego hay un botón CONECTAR.
El objetivo es que al darle a conectar se cree otro formulario con los parámetros apropiados y se establezca la conexión.
private sub Conectar()
Dim F as NEW FormConexion(textbox1.text, textbox2.text,textbox3.text)
F.showmodal()
end
Creo la instancia enviando el contenido de tres textboxes como parámetros. El método especial _new se inicia al iniciarse el formulario y puede recibir parámetros (en este caso tres)
En el formulario FormConexion tengo lo siguiente para recibir esos parámetros
Al iniciarse el formulario se crea un socket, se le dan los parámetros apropiados y se llama a una función conectar que se ocupa de eso. Esa función devuelve true o false. Si es true se envía el mensaje.
En este caso es muy probable que queramos que al cerrar el formulario formConectar se cierre la conexión creada. El método especial _free se inicia al descargarse el formulario.
Crear un formulario y crearle unas propiedades específicas y un método para enviar
Volvamos al caso de antes. Unos textboxes para escribir los parámetros y un botón conectar. Al pulsar el botón se envían esos parámetros, se establece la conexión y se envía el mensaje
private sub Conectar()
Dim F as new FormConectar 'esta vez no le envío parámetros
F.Direccion=textbox1.text 'a la propiedad Direccion le doy el primer valor
F.Puerto=textbox2.text 'a la propiedad puerto le doy el segundo valor
F.enviar(textbox3.text) 'llamo al método enviar y le paso como parámetro el mensaje a enviar
end
En el formulario FormConectar()
La función Conectar intenta realizar la conexión y la rutina enviar envía el mensaje
La rutina enviar se ejecuta solo si el socket está conectado y lo que hace es envier el mensaje
En este segundo caso podría haber definido S a nivel de formulario. Como no lo hice lo declaro en una función y solo existe ahí así que se lo tengo que pasar como parámetro a las funciones de conectar y enviar.
Es para que se vean distintas maneras de conseguir lo mismo.
En vez de enviar datos se pueden envier clases. Ejemplo, en vez de enviar el text de cada textbox yo podría haber enviado los tres textboxes.
Dim F as new FomConectar(textbox1, textbox2, Textbox3)
En ese caso en el _new debería poner
Y por poder podría haber enviado el formulario entero
Y en el _new haber recibido al formulario
Diversas alternativas para pasar datos, controles, formularios o cualquier clase nativa o propia de un formulario a otro. De hecho no es para pasar cosas de un formulario a otro. Un formulario es una clase y estas técnicas sirven para pasar de una clase a otra, incluídas las clases de tipo form.
Un saludo