2017-12-02 12 views
0

このコードでC#で開いたフォームを検出しようとしています。C#開いているフォームを検出する方法

if ((Application.OpenForms["Form1"] as Form1) != null) 
{ 
    Application.OpenForms["Form1"].Close(); 
} 

私のフォームはShowInTaskBar = falseですが、私のコードは機能しません。

フォームにプロパティShowInTaskBar = falseがある場合、開いたフォームまたは閉じたフォームを検出するにはどうすればよいですか?

+0

チェックこの https://stackoverflow.com/questions/3861602/how-to-check-if-a-windows-form-is-already-open-and-close-it-if-it -is –

+0

フォームプロパティがShowInTaskBar = falseの場合このソリューションは動作していません –

答えて

1

あなたがする必要があるのは、アプリケーションレベルの取得フォームが次のようにできることです。

FormCollection openforms = Application.OpenForms; 

    foreach (Form frms in openforms) 
    { 
if (frms.Name=="frmsomething") 
{ 
frms.close(); 
} 

    //What ever you want do with individual forms in frms object 
    } 
+0

すばやく再生していただきありがとうございますが、動作していません。フォームのプロパティがShowInTaskBar = falseの場合openformsのカウントは0.iです。変更されたプロパティSh​​owInTaskBar = true; openformsの数は1ですが、この解決法は私のためには役に立ちません –

+0

ShowInTaskBar = falseであってもその罰金をテストします。問題の詳細を別の場所から共有してください... –

+0

おそらくここにあなたの問題があります:https: //stackoverflow.com/questions/3751554/application-openforms-count-0-always –

0

問題がShowInTaskBar = falseが開かれたフォームのリストでフォームを無視するように.NETを引き起こすことがあるようです。ただし、int this SO answerに記述されているように、Windows APIを使用してタスクバーに表示されないようにフォームを設定できます。

0
Form2 form 
private void btn1_Click(object sender, EventArgs e) 
    { 
     form = new Form2(); 
     form.Show(); 
    } 

private void btn2_Click(object sender, EventArgs e) 
    { 
     if(form != null && !form.IsDisposed){ 
       form.Close(); 
     } 
    } 
関連する問題