1
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (MessageBox.Show("Are you Sure you want to Exit. Click Yes to Confirm and No to continue", "WinForm", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
            {
                e.Cancel = true;
            }
            else
            {
                Application.Exit();
            }
        }

Application.Exit(); 何らかの理由で、プログラムを終了する前に YES を 2 回クリックする必要があります。そして、次のようにエクスプローラー ウィンドウを閉じません。

Process.Start("explorer", String.Format("/select,{0}", t));

プログラムを終了しても、このエクスプローラーは開いたままです。

4

1 に答える 1

1

技術的には、これらのウィンドウはアプリケーションに属していないため、閉じてはいけません。

編集、コメントに関して:以下に提供される解決策は機能しません、申し訳ありませんが、私の間違い:)

開いたエクスプローラー ウィンドウを本当に制御したい場合は、Start メソッド ( http://msdn.microsoft.com/en-us/library/53ezey2s.aspx ) の戻り値を収集してから、Kill メソッドを呼び出します。それぞれについて ( http://msdn.microsoft.com/en-us/library/system.diagnostics.process.kill.aspx )。ユーザーが自分でそれらを閉じた可能性があるため、それらがまだ存在するかどうかを確認してください。

1 つのウィンドウの簡単な例:

class Form
{
//...
private Process explorerWindow = null;
}

//...

this.explorerWindow = Process.Start("explorer", String.Format("/select,{0}", t));

//... (in OnFormClosing)

if (this.explorerWindow != null && !this.explorerWindow.HasExited)
{
this.explorerWindow.Kill();
}

同様のことを行いますが、List を使用します。また、OnExited イベントに接続して、特定のプロセスが消えたときにリストから削除することもできます (ユーザーがプロセスを閉じたため、fe)。

于 2013-08-04T22:58:53.577 に答える