1

ac#3.5アプリのフォームで奇妙な動作が発生しています。ボタンをクリックすると、form1が非表示になり、新しいform2が作成され、form2が表示されます。Form1には、form2が閉じたときにトリガーされるイベントメソッドも含まれています。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();  
    }

さて、私の問題は、form2を開くと(form1を非表示にする)、またはform2を閉じると(form1を表示する)、新しいフォームが画面に一瞬表示されてから非表示になることがあるということです。それはまだ開いていて、タスクバーからクリックしてもう一度表示できますが、ウィンドウ自体は他の開いているウィンドウの後ろに送信されます。開いているように見えますが、すぐに最小化されます。

この動作はランダムに発生します。フォームが問題なく開いたり非表示になったりすることもありますが、別のウィンドウにフォーカスが失われることもあります。focus()、activate()、およびtopmostを使用してみましたが、突然の非表示を防ぐことができませんでした。

なぜこれが起こっているのか、そしてそれを修正する方法を誰かが知っていますか?

ありがとう。

4

1 に答える 1

1

フォームを非表示にするのが早すぎます。しばらくの間、アプリにはフォーカスを含めることができるウィンドウがありません。これにより、Windows はフォーカスを与える別のウィンドウを探しに行き、別のアプリケーションから 1 つを選択します。そのウィンドウがフォアグラウンド ウィンドウになり、2 番目のフォームはフォーカスを取得せず、Z オーダーの下に表示されます。修正は簡単です:

void button1_Click(object sender, EventArgs e)
{           
    form2 = new form2();
    form2.Show();
    form2.FormClosed += new FormClosedEventHandler(form2_FormClosed);               
    this.Hide();  // Moved
}
于 2009-11-15T23:32:42.657 に答える