嗯,你是顯示的對話框讓您明明白白會第二看到一個分裂的另一個窗口前隱藏你的主窗口,取其在它後面。你所做的事情也是非常危險的,你的程序失去焦點的可能性非常高。在顯示對話框之前和特別是之後,您的程序將沒有可以接收焦點的窗口。所以Windows窗口管理器被迫找到另一個窗口來關注它,它會選擇另一個應用程序的窗口。強迫你的背景,如果窗口足夠大,讓它完全消失。
您需要採取相應措施。您可以通過延遲Hide()調用隱藏主窗口,表單的BeginInvoke()方法非常方便。你需要確保你的主窗口在對話框關閉之前再次可見。對話框的FormClosing事件對此很有幫助。儘管如果對話框已經連線事件而不是覆蓋OnFormClosing(),那麼並非100%可靠。
這樣:
private void DisplayDialog_Click(object sender, EventArgs e) {
using (var dlg = new Form2()) {
this.BeginInvoke(new Action(() => this.Hide()));
dlg.FormClosing += dlg_FormClosing;
dlg.StartPosition = FormStartPosition.Manual;
dlg.Location = this.Location;
if (dlg.ShowDialog() == DialogResult.OK) {
// etc..
}
dlg.FormClosing -= dlg_FormClosing;
}
}
void dlg_FormClosing(object sender, FormClosingEventArgs e) {
if (!e.Cancel) this.Show();
}
或者只是不隱藏自己的主窗口。這不是非常有用,對話框現在非常令人討厭,是模態並防止任何複製/粘貼。防止用戶完全看到窗口只是隱藏了可能對用戶有用的信息。
感謝第一個解決方案的工作。 – techno