Reiniciar Formulario(Solucionado)


Objetivo: Reiniciar Formulario(Solucionado)
Hola, necesito cerrar un formulario y volver a cargarlo. Lo estoy haciendo de la siguiente manera
PUBLIC SUB Btnnuevo_Click()
' --------------cargar form1,cuya instrucciòn es cerrarse y reabrir este formulario para reiniciarlo
ME.Close
Form1.Show

END

Esto me obliga a crear otro formulario cuya única función es cerrarse y abrir este de vuelta.
¿Alguien conoce una manera mejor de hacerlo?
Desde ya, muchas gracias.

última edición por Dani26 el Jueves, 24 Junio 2010, 02:41; editado 1 vez
Objetivo: Re: Reiniciar Formulario
Bueno si solo es reiniciarse mira con:


ME.Refresh


Objetivo: Re: Reiniciar Formulario
No, ya probè y el refresh solo lo que redibuja, los valores de las variables creadas al iniciar no cambian y no limpia la matriz de controles creada en tiempo de ejecuciòn. Busquè en google y no encontrè nada, tampoco en el libro de gambas.
O sea, el mètodo que estoy usando no creo que sea engorroso ni complicado, solo que me implica crear una interfaz gràfica que solo se carga,se descarga y recarga el formulario que lo abrió.
Gracias

Objetivo: Re: Reiniciar Formulario
Hola.
No entiendo muy bien tu problema. ¿Por qué dices que necesitas abrir un formulario para reiniciar otro? ¿No te vale con una función?
Saludos.

Perfil MP  
Objetivo: Re: Reiniciar Formulario
Dani26, por favor presta atención al hecho de que tu problema no es saber cómo reiniciar un formulario, sino que eso es lo que estás suponiendo solucionará el verdadero problema que enfrentas. Es necesario que expliques cual es ese problema que realmente necesitas solucionar para que podamos ayudarte.

Tampoco se comprende bien a qué te refieres con limpiar la matriz de controles: ¿borrar los datos que contienen o eliminar los controles?

Si lo que quieres asignar valores específicos a ciertas variables, propiedades de controles o eliminar ciertos controles, crea una rutina (en el mismo formulario) que haga eso, y luego la llamas todas las veces que lo necesites. Por ejemplo:

PRIVATE SUB ReIniciar()
DIM obj AS Object
FOR EACH obj IN ME.Controls
IF obj IS TextBox THEN obj.Clear
IF obj IS ListBox THEN obj.Delete
NEXT
$sVariable1 = ""
$iVariable2 = 2005
$bMostrar = TRUE
END

Objetivo: Re: Reiniciar Formulario
Amigos, humildemente, en realidad no sé si considerarlo un problema.
Cuando inicia el formulario se cargan un montón de variables, una de elllas aleatoria(película). A su vez esta variable crea una matriz de textbox invisibles(salvo los espacios vacìos) con unos label a modo de subrayado. Ademàs inicializa los errores posibles, un timer, pone en un textbox la cantidad de letras a acertar y limpia el textbox de las letras usadas.

Al ser tantas variables a reiniciar, textbox a limpiar, matriz a destruir, me parece que el código se volverìa engorroso.
¡ojo! Hablo desde la perspectiva de un aprendiz consciente de que es más lo que tiene para aprender, que lo poco que ya sabe. Me pareciò terriblemente simple el metodo de cerrar el formulario y volver a abrirlo y asì generar otra vez el evento open.
Quizàs un poco de còdigo lo ilustre mejor,( recorté la parte de carga del listbox para hacerlo más corto)
' gambas class file
PRIVATE matrizObjetos AS Object[]
PRIVATE inicializado AS Boolean
PRIVATE largoCadena AS Integer
PRIVATE fallos AS Integer
PRIVATE letras AS Integer


PUBLIC SUB Form_Open()
'cargar lista
listbox1.add("submarino amarillo")
listbox1.add("Avion presidencial")
listbox1.add("Mujer bonita")
listbox1.add("Doce hombres en pugna")
----------cargar errores,ocultar pelìcula,inicializar timer y lanzar el sub elegir
Textbox3.text = "6"
TextBox1.visible = FALSE
elegir
TextBox2.text = 120
PUBLIC SUB elegir()

' gambas class file
DIM partesCadena AS String
DIM textbox AS textbox
DIM caracter AS String
DIM x AS Integer
DIM nombrePelicula AS String
DIM pelicula AS String[]
DIM cadenaCompleta AS String
DIM label AS label
DIM lugar AS Integer

'--------------------------------elegir aleatoriamente una pelicula de la lista y copiarla en textbox1
lugar = Int(Rnd() * (ListBox1.Count))
TextBox1.text = ListBox1.List[lugar]

'------------------------------Asignar el nombre de la pelicula
nombrepelicula = TextBox1.text
' -----------------------------Pasar a minúscula
nombrepelicula = LCase(nombrePelicula)
'------------------------------- dividir caracteres
pelicula = Split(nombrePelicula)

'--------------------------------Juntar nombre pelicula
FOR EACH partesCadena IN pelicula
cadenaCompleta = cadenaCompleta & partesCadena
NEXT

'------------------------------Tomar largo pelicula
largoCadena = Len((cadenaCompleta))
' -------------inicializar variable letras (cantidad a acertar)
letras = largocadena

IF NOT inicializado THEN
'-------------------------------Creacion de la matriz de texbox
matrizObjetos = NEW Object[]

'-------------------------------Numero de texbox
FOR x = 1 TO largoCadena


'--------------------------------Creacion de los textbox
textbox = NEW TextBox(ME)
label = NEW label(ME)
'--------------------------------------Posicionamiento de los textbox
textbox.X = (x * 10 + x) * 2.5 + 2
textbox.Y = 200
textbox.width = 20
textbox.height = 40
textbox.visible = TRUE
label.x = (x * 10 + x) * 2.5 + 2
label.y = 250
label.Width = 20
label.Height = 5
label.Background = Color.Black


'-------------------------------------------Lectura de los caracteres de la cadena
'y colocacion en los textbox.
caracter = Mid(cadenaCompleta, x, 1)
textbox.Text = caracter
matrizObjetos.Add(textbox, x)
'--------------------------------------------bloquearlos textbox para que el usuario no pueda
' escribir en ellos
textbox.Enabled = TRUE
'-------------------------------------------comprobar si es espacio vacìo y cambiar color de fondo
' ------------------------------------------en caso contrario hacer el textbox invisible
IF textbox.text = " " THEN
textbox.Background = Color.Blue
'-------------------------------------------restar espacios vacios a la variable letras
letras = letras - 1
ELSE
textBox.Visible = FALSE

END IF
NEXT

END IF
txtletra.SetFocus
TextBox4.text = letras
END


Y una captura de pantalla
juego_1277257721_369774
Gracias a todos.
Saludos

Objetivo: Re: Reiniciar Formulario
Hola Dani

Veo que ya terminas tu juego. Habrá que probarlo.
En cuanto al código, lo ideal es que separaras tu interfaz gráfica, de las reglas de negocio(Subrutinas de código).
¿Cómo hacerlo?.

1) Crea un modulo llamado modAcciones
2) Dentro de este Declara todas tus variables y crea los procedimientos necesarios,ejemplo.

Public sub limpiar()
'Aqui va el codigo que restablece todos los controles
End sub

Public sub elegir()
'Aqui va el codigo principal
End sub

3)En el evento Open del formulario, deberas llamar al procedimiento principal.

Public sub Form_Open()

modAcciones.elegir()

End sub

4) En el boton nuevo juego, en su evento click, debes agregar el siguiente codigo.

Public sub nuevojuego_click()
modAcciones.limpiar()
End sub

Esto es solo un bosquejo, para que tu codigo quede mejor estructurado.

Saludos

última edición por abarzuaf el Miercoles, 23 Junio 2010, 04:22; editado 1 vez
Perfil MP  
Objetivo: Re: Reiniciar Formulario(Solucionado)
Estimado abarzuaf, tu consejo me dio la soluciòn a mi problema.Creé un mòdulo(Modreinicio) con el siguiente código.
public sub reiniciar()
frmjuego.close
frmjuego.show
end

En el botón nuevo juego del frmjuego coloquè lo siguiente:

Public sub btnnuevo_click
modreinicio.reiniciar
end

Esto me permitió eliminar el "formulario auxiliar".
Tu consejo de separar código e interfaz gráfica me dio la idea.En unos días espero poder estar publicando una primera versión del juego.
Saludos y gracias a todos.


Página 1 de 1


  
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
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.4439s (PHP: -60% SQL: 160%)
Consultas SQL: 47 - Debug off - GZIP Activado