Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
A Cerca De Controles En Distintos Formularios
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje A Cerca De Controles En Distintos Formularios 
 
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
 



 
última edición por messerschmitt el Sabado, 16 Abril 2011, 12:54; editado 2 veces 
messerschmitt - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: A Cerca De Controles En Distintos Formularios 
 
Hola.

¿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, 12:58; editado 1 vez 
pittusa - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: A Cerca De Controles En Distintos Formularios 
 
No
Muchas gracias, ya está resuelto
 



 
messerschmitt - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
private S as new socket
private Mensaje as string
public sub _new(direccion as string, puerto as string, mens as string)
S.Host=direccion
S.port=puerto
Mensaje=mens
if conectar() then
   enviar(mensaje)
endif
end

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.
public sub _free()
S.close
end


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()
'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

La función Conectar intenta realizar la conexión y la rutina enviar envía el mensaje

private function Conectar(S as socket) as boolean
dim valido as boolean
S.connect()
...
return valido
end


La rutina enviar se ejecuta solo si el socket está conectado y lo que hace es envier el mensaje
private EnviarMensaje(S as socket, Mensaje as string)
write #S,Mensaje,len(Mensaje)
end


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
public sub _new(t1 as textbox, t2 as textbox, t3 as textbox)
...
end


Y por poder podría haber enviado el formulario entero
Dim F as new FormConectar(me)

Y en el _new haber recibido al formulario
public sub _new(F as FormConectar)
...
end


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
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Grupo De Distintos Controles Con Evento Co... Shell General 2 Jueves, 01 Septiembre 2016, 20:35 Ver último mensaje
Shell
No hay nuevos mensajes Recorriendo Los Formularios Y Controles De... lumbanico General 7 Martes, 26 Febrero 2013, 12:01 Ver último mensaje
lumbanico
No hay nuevos mensajes Array De Distintos Tipos Shell General 20 Sabado, 27 Septiembre 2014, 10:04 Ver último mensaje
Shell
No hay nuevos mensajes Formularios Muchos Formularios Ideas De D... codificador General 5 Viernes, 07 Junio 2013, 08:22 Ver último mensaje
codificador
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario