Hola, hace poco tiempo que migré a Linux y lo que más de adapta a mis necesidades es gambas. Pues bien, tengo dos formularios, el primer formulario sirve para especificar el contenido de un Label y un Socket de un formulario distinto, entonces lo que quiero es establecer el valor de esos dos desde otro formulario, pero cuando intento hacerlo salta un error diciendo Unknown symbol 'Socket1' in class 'Form1'.
El formulario principal es FMain y el secundario Form1.
Tengo éste codigo:
PUBLIC SUB Button1_Click()
Form1.Socket1.Host = Val(TextBox2.Text)
ME.hide
Form1.Show
END
Edit:
Uso gb.gui, Gnome, gambas 2.21, y mi sistema operativo es Ubuntu 10.10
A Cerca De Controles En Distintos Formularios
Objetivo: A Cerca De Controles En Distintos Formularios
última edición por messerschmitt el Sabado, 16 Abril 2011, 11:54; editado 2 veces
última edición por messerschmitt el Sabado, 16 Abril 2011, 11:54; editado 2 veces
Objetivo: Re: A Cerca De Controles En Distintos Formularios
última edición por pittusa el Sabado, 16 Abril 2011, 11:58; editado 1 vez
Hola.
¿has activado en las propiedades del proyecto, que los controles son públicos en todos los formularios?
¿has activado en las propiedades del proyecto, que los controles son públicos en todos los formularios?
última edición por pittusa el Sabado, 16 Abril 2011, 11:58; editado 1 vez
Objetivo: 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()
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
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.
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
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()
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
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()
'definir variables a nivel de formulario
private Dir as string
private Puer as string
'definir las propiedades
property Direccion as string 'en el write ponemos Dir=value
property Puerto as string 'en el write ponemos Puer=value
'definir el método enviar
public sub Enviar(Mensaje as string)
private S as new socket
S.Host=Dir
S.Port=Puer
if Conectar(S) then
EnviarMensaje(S,Mensaje)
endif
end
private Dir as string
private Puer as string
'definir las propiedades
property Direccion as string 'en el write ponemos Dir=value
property Puerto as string 'en el write ponemos Puer=value
'definir el método enviar
public sub Enviar(Mensaje as string)
private S as new socket
S.Host=Dir
S.Port=Puer
if Conectar(S) then
EnviarMensaje(S,Mensaje)
endif
end
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.
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
Página 1 de 1
No puede crear mensajesNo puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario
Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.
Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo
Página generada en:: 0.2203s (PHP: -36% SQL: 136%)
Consultas SQL: 31 - Debug off - GZIP Activado