Pregunta

Estoy encontrando un comportamiento extraño con las formas en una columna C # 3.5 aplicación. En un clic de botón, mi formulario1 oculta, crea un nuevo formulario2, y muestra Form2. Form1 también contiene el método de evento desencadenado cuando formulario2 cierra. Aquí está el código dentro de Form1:

Form2 form2;

void button1_Click(object sender, EventArgs e)
    {           
        this.Hide();
        form2 = new form2();
        form2.Show();
        form2.FormClosed += new FormClosedEventHandler(form2_FormClosed);               
    }

void form2_FormClosed(object sender, FormClosedEventArgs e)
    {
        form2.Dispose();
        form2 = null; 
        this.Show();  
    }

Ahora, mi problema es que a veces cuando abro formulario2 (ocultando Form1), o cuando cierro formulario2 (mostrando Form1), la nueva forma se van a plantear en la pantalla durante un parpadeo y luego ocultarse. Es todavía abierta y que puede hacer clic desde la barra de tareas para mostrar de nuevo, pero la propia ventana se envía detrás de cualquier otra ventana abierta. Parece que se abre, pero minimiza al instante.

Este comportamiento se produce al azar. A veces, las formas se abrirán y se esconden sin ningún problema, pero a veces van a perder el foco sobre otra ventana. He intentado usar el enfoque (), Activar (), y la más alta, pero todos han fallado en prevenir la ocultación repentina.

¿Alguien sabe por qué sucede esto y cómo solucionarlo?

Gracias.

¿Fue útil?

Solución

ocultar su forma demasiado pronto. Durante un breve momento, su aplicación no tiene ninguna ventana que puede contener el foco. Eso obliga a Windows para ir en busca de otra ventana para dar el foco a, se elige una de otra aplicación. Esa ventana ahora será la ventana en primer plano, su segunda forma, no será la ventana activa y aparecen más baja en el orden Z. La solución es simple:

void button1_Click(object sender, EventArgs e)
{           
    form2 = new form2();
    form2.Show();
    form2.FormClosed += new FormClosedEventHandler(form2_FormClosed);               
    this.Hide();  // Moved
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top