Frage

Ich bin Begegnung seltsame Verhalten mit Formen auf einem c # 3.5 App. Auf eine Schaltfläche klicken, mein form1 versteckt sich, schafft eine neue form2 und zeigt Form2. Form1 enthält auch die Ereignismethode ausgelöst, wenn form2 schließt. Hier ist der Code in 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();  
    }

Nun, mein Problem ist, dass manchmal, wenn ich offen form2 (Versteck form1) oder wenn ich in der Nähe form2 (form1 zeigt), wird die neue Form für ein Blinzeln auf dem Bildschirm kommen und dann verstecken sich. Es ist noch offen, und ich kann es aus der Taskleiste klicken, um es zu zeigen, wieder, aber das Fenster selbst hinter allen anderen geöffneten Fenstern gesendet. Es sieht aus wie sie sich öffnet, sondern minimiert sofort.

Dieses Verhalten tritt zufällig. Manchmal werden Formen öffnen und zu verstecken, ohne ein Problem, aber manchmal werden sie verlieren ein anderes Fenster den Fokus auf. Ich habe versucht, Fokus () verwenden, activate () und oberste aber alle gescheitert sind das plötzliche Versteck zu verhindern.

Wer weiß, warum ist das passiert und wie man es beheben?

Danke.

War es hilfreich?

Lösung

Sie verstecken Ihre Form zu früh. Für einen kurzen Moment, Ihre Anwendung hat kein Fenster, das den Fokus enthält. Das zwingt Windows auf die Jagd gehen für ein anderes Fenster den Fokus zu geben, wird es eine von einer anderen Anwendung auswählen. Das Fenster wird nun das Vordergrundfenster, Ihre zweite Form nicht den Fokus erhalten und weiter unten in der Z-Reihenfolge angezeigt werden. Die Lösung ist einfach:

void button1_Click(object sender, EventArgs e)
{           
    form2 = new form2();
    form2.Show();
    form2.FormClosed += new FormClosedEventHandler(form2_FormClosed);               
    this.Hide();  // Moved
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top