2011-10-11 19 views
1

我打開窗口2爲「假彈出」把窗口2到前從停用Form1中

this.enabled = false; 
MyForm2 myform2 = new MyForm2(); 
myform2.Show(); 
myform2.BringToFront(); 

當我處理窗口2我能Form1中回Form1上。

現在,如果用戶最小化兩個表單,然後單擊form1,form1將彈出他的disenabled狀態。 我需要彈出form2 insted。

所以我創建了一個靜態類來保存我最後一個活動表單。在form2(或任何其他形式)的加載時,我保存了最後一個活動表單。

protected override void OnLoad(System.EventArgs e) 
{ 
    base.OnLoad(e); 
    MyStaticClass.lastForm = this; 
} 

在Form1(和其他類似形式)我使用:

protected override void OnGotFocus(System.EventArgs e) 
    { 
     base.OnGotFocus(e); 
     if (!this.Enabled && MyStaticClass.lastForm!= null && MyStaticClass.lastForm != this) 
     { 
      MyStaticClass.lastForm.Show(); 
      MyStaticClass.lastForm.BringToFront(); 
      MyStaticClass.lastForm.Activate(); 
     } 
    } 

OnGotFocus被執行和我的節目/激活等不太多,但從未窗體2彈出。我究竟做錯了什麼?

謝謝 GG

+1

如何使用模式彈出窗口。 –

+2

使用myform2.Show(this); –

回答

1

你是「顯示」和「激活」的形式,問題是它仍然最小化。將WindowState更改爲Normal。

MyStaticClass.lastForm.WindowState = FormWindowState.Normal; 
+0

這工作,但只有當我放棄OnActivate的OnGotFocus。不知道爲什麼。哦,代碼:MyStaticClass.lastForm.WindowState = FormWindowState.Normal; – ggpuz

+0

@ggpuz - 是的,我在工作,所以我正在記憶中。我會解決它,所以別人不會摸索它。 –

1

我覺得用戶點擊一個窗口的任務欄按鈕會得到另一個,會讓用戶感到困惑。

而不是通過這個rigamarole,嘗試在form1中調用ShowDialog()而不是Show();這將阻止對Form1的所有訪問,直到Form2關閉。 ShowDialog也有一個接受「父」或「所有者」形式的重載;如果使用這個過載(只是通過this),對話框將始終顯示在Form1前面。

+0

謝謝,我會盡快查看 – ggpuz