2012-01-18 88 views
1

有沒有辦法將已經最小化的窗體放到前面?我曾嘗試下面的代碼,但沒有成功:當窗體在任務欄中最小化時將窗體放在前面

 filterForm.Show(); 
     filterForm.Activate(); 
     filterForm.BringToFront(); 

P.S:這種形式是從另一個窗體調用,用戶在做它的一些東西,然後可以將其最小化。我只想要一次打開此表單的單個實例,因此第二次用戶單擊按鈕以顯示錶單時,我正在檢查表單是否已顯示,如果顯示,我希望它在前面:

public FilterForm filterForm; 
public bool IsFilterFormActive; 

private void tsOpenFilerForm_Click(object sender, EventArgs e) 
{ 
    if (!IsFilterFormActive) 
    { 
     filterForm = new FilterForm(); 
     filterForm.FormClosing += delegate { 
               IsFilterFormActive = false; 
              }; 
     IsFilterFormActive = true; 
     filterForm.Show(); 
    } 
    else 
    { 
     filterForm.Show(); 
     filterForm.Activate(); 
     filterForm.BringToFront(); 
    } 
} 

回答

7

你正在泄漏表單實例,最好的辦法是在關閉時將其設置回null。然後你也不需要布爾。像這樣:

FilterForm filterForm; 

    private void tsFilterForm_Click(object sender, EventArgs e) { 
     if (filterForm == null) { 
      filterForm = new FilterForm(); 
      filterForm.FormClosed += delegate { filterForm = null; }; 
      filterForm.Show(); 
     } 
     else { 
      filterForm.WindowState = FormWindowState.Normal; 
      filterForm.Focus(); 
     } 
    } 
+0

謝謝。 「FormClosing」和「FormClosed」事件之間有巨大差異嗎?兩者都似乎工作! – 2012-01-18 18:32:20

+1

是的,FormClosing可以取消。用於WindowState的 – 2012-01-18 18:33:36

+0

++。 – Serg 2013-11-26 20:12:32

6

添加filterForm.WindowState = FormWindowState.Normal;以便恢復窗口。如果它最小化,你首先必須再次提起它。那麼filterForm.Activate()應該就夠了。

相關問題