• Viernes 29 de Marzo de 2024, 11:56

Autor Tema:  El compilador no da error, pero no se ejecuta correctamente mi WindowsForm  (Leído 2542 veces)

whaitie

  • Nuevo Miembro
  • *
  • Mensajes: 16
    • Ver Perfil
0
Hoal buenas a todos, tengo un problema con este proyecto:

http://www.mediafire.com/?37hb1d9ipywe5t4

esta echo en visual studio 2010 , y bueno mi problema es que es un juego de Sprites (imagenes .jpg) , tipo naves-arcade.

lo eh sacado de un libro en .PDF , y fue un lio acomodar todo y muchas cosas hacerlas a mano (aunque me gusto, por que aprendi mucho), y logre que no me diera ningun error, pero cuando compilo no aparece mas que la ventana del windows.form en blanco , sin imagenes, sin las labels.. nada(1).

desde ya muchas gracias por su ayuda :)

*(1) Vease en la imagen atachada
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re:El compilador no da error, pero no se ejecuta correctamente mi WindowsForm
« Respuesta #1 en: Sábado 27 de Agosto de 2011, 19:05 »
0
Hola whaitie, el error esta en el siguiente metodo

Código: [Seleccionar]
        public void theForm()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();
            //I added this call, to a method that starts up a round
            initGame();
        }

Ese metodo se supone que deberia ser el constructor de la clase (recuerdas el hilo anterior donde hablabamos de costructores), como te habia comentado la vez pasada, el constructor es el metodo que se utiliza para inicializar el objeto, y se ejecuta automaticamente cuando el objeto es creado. Dado que la clase se llama Form1, el constructor deberia llamarse Form1(), sin embargo no hay ningun constructor llamado Form1(), al parecer cuando copiaste el programa del libro cambiaste el nombre del constructor de Form1(), a theForm(), entonces dado que el nombre del metodo no coincide con el nombre de la clase (que es el requisito para ser el constructor, recuerda, el constructor siempre se llama igual que la clase), el constructor nunca es llamado, y nunca se ejecuta InitializeComponent() que es lo que inicializa los componentes (controles) de tu formulario, y carga las imagenes, por eso el formulario aparece en blanco.

Pero ademas hay otro error de logica, dentro del metodo theForm() hay una llamada a un metodo llamado initGame(), que a su vez llama a Application.Restart(), que reinicia el programa de nuevo, al ser llamado dentro del constructor, hace que se reinicie el programa y vuelva a crear el objeto, lo que genera que entre en un cliclo infinito, y que aparezcan infinidad de ventanas sin dar tiempo a que puedas cerrar el programa.

La solucion es que cambies el nombre nombre del metodo a Form1() (o como quiera que se llame la clase, recuerda eso, en este caso la clase se llama Form1, pero si cambias el nombre de la clase, debes cambiar el nombre del metodo costructor para que coincida con el nombre de la clase, recuerda eso) para que el metodo InitializeComponent() sea llamado, y elimina la llamada a initGame(), el codigo debera quedar asi:

Código: [Seleccionar]
        public Form1()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();
            //Eliimina la siguiente linea
            //initGame();
        }

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

whaitie

  • Nuevo Miembro
  • *
  • Mensajes: 16
    • Ver Perfil
Re:El compilador no da error, pero no se ejecuta correctamente mi WindowsForm
« Respuesta #2 en: Domingo 28 de Agosto de 2011, 00:41 »
0
si a las 3 hrs de dar vueltas con esta solucion, lo habia conseguido, pero viste cuando no tir error el compilador por ahi cueta mas siendo principante jeje.

ah todo esto me gustaria que este juego tubiese un menu, digamos que creo un Windows.Form llamado "Index.cs" , y me gustaria que apretando un boton me llevase a "form1.cs" , por ejemplo.

y estoy buscando en la referencia y en visual studio alguna manera de llamar al Metodo o al windows.form desde un boton del Index.cs .

desde ya muchas gracias profesor-X siempre tan atento ^^

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re:El compilador no da error, pero no se ejecuta correctamente mi WindowsForm
« Respuesta #3 en: Domingo 28 de Agosto de 2011, 08:12 »
0
ah todo esto me gustaria que este juego tubiese un menu, digamos que creo un Windows.Form llamado "Index.cs" , y me gustaria que apretando un boton me llevase a "form1.cs" , por ejemplo.

Bueno, si lo que quieres es un menu como los clasicos menu de las aplicaciones (Archivo, Edicion, etc) simplemente añade un control MenuStrip al formulario, y añade las opciones que necesites.

Si lo que deseas es llamar a un formulario 1 desde otro formulario 2, deberas añadir tu formulario 2, crear en ese formulario 2 un objeto de tipo formulario 1 y luego llamar el metodo Show del formulario 1 por medio del boton del formulario 2.

Te lo explico con mas detalle, suponiendo que tu formulario 2 se llamara Index como en tu ejemplo, y el formulario uno se llamara Form1 ;).

1. Añades un formulario 2 llamado Index (de aqui en adelante le diremos Index al formulario 2).

2. Añades un boton al formulario Index.

3. Añades una variable privada llamada form1 para referirte al formulario uno.

4. En el contructor creas (new) una instancia del Form1.

5. En el evento Click de tu boton, llamas al metodo Show del formulario 1.

6. El codigo de Index quedaria asi:

Código: [Seleccionar]
    public partial class Index : Form
    {
        // Variable privada para referirte al formulario 1
        private Form1 form1;
        public Index()
        {
            InitializeComponent();
            // Creas una instancia del formulario 1
            form1 = new Form1();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // Llamas al metodo Show del formulario 1
            form1.Show();
        }
    }

7. En el formulario uno, añades codigo para el evento FormClosing para evitar que se cierre el formulario 1, en lugar de cerrarlo, vamos a ocultarlo cuando pulses el boton de cerrar (la x roja) del formulario 1. El codigo del evento quedaria asi:

Código: [Seleccionar]
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            // Cancelamos el cerrado del formulario
            // y en lugar de cerrarlo, solo lo ocultaremos
            e.Cancel = true;
            // Llamamos al metodo Hide para ocultar el formulario
            this.Hide();
        }

8. Finalmente, en lugar de crear un Form1 al inicio de la aplicacion, creamos un Index. El codigo de Main() quedaria asi:

Código: [Seleccionar]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            // En lugar de crear un Form1, creamos un
            // Index, recuerda que en Index estaremos
            // creando el Form1
            Application.Run(new Index());
           
        }

Espero te sirva la informacion.

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

whaitie

  • Nuevo Miembro
  • *
  • Mensajes: 16
    • Ver Perfil
Re:El compilador no da error, pero no se ejecuta correctamente mi WindowsForm
« Respuesta #4 en: Lunes 29 de Agosto de 2011, 00:47 »
0
gracias profesor X ^^ , deveras que esta leccion me sirvio muchisimo, ya lo aplique a varias de mis nuevas aplicaciones de practica y ya llamo al formulario deseado cuando se me da la gana.

Deberias de escribir un libro, enserio, se te nota la experiencia y tus explicaciones son de profesor de universad.

saludos , y hasta pronto , por que pronto seguire molestando en este foro seguramente jajaja