2012-01-18 4 views
1

既に最小化されたフォームをtaksbarに前面に持ってくる方法はありますか?私は以下のコードを試してみましたが、何の成功:タスクバーで最小化されたときにフォームを前面に移動

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

P.S:このフォームが別のフォームから呼び出され、ユーザーはそれにいくつかのものもしないし、それを最小限にすることができます。このフォームの1つのインスタンスだけを一度に開くようにしたいので、ユーザーがフォームを表示するためにボタンを2回クリックします。フォームが既に表示されているかどうかを確認しています。

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'イベントの間には大きな違いがありますか?どちらもうまくいくようです! –

+1

はい、FormClosingをキャンセルできます。 WindowStateの場合は –

+0

++。 – Serg

6

前にウィンドウを復元するためにfilterForm.WindowState = FormWindowState.Normal;を追加します。その最小化された場合は、最初に再度それを持って来なければなりません。その後、filterForm.Activate()で十分です。

関連する問題