0

WindowsフォームのForm_Loadイベントで、FolderBrowserDialogを表示して、ユーザーがディレクトリを選択できるようにします。選択したディレクトリが有効でない場合(つまり、アプリケーションに必要な特定のファイルがない場合)、もう一度表示します。 。ただし、新しいFolderBrowserDialogを作成すると、ShowDialogを呼び出しても表示されません。

while (ValidDirectorySelected() == false && tryAgain == true)
{
 using (FolderBrowserDialog dialog = new FolderBrowserDialog())
 {
  dialog.ShowNewFolderButton = false;

  if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.Cancel)
  {
   tryAgain = false;
  }
 }
}

それに足を踏み入れると、2回目にdialog.ShowDialog()行に到達し、その後何も起こりません。ダイアログは表示されず、デバッガーは先に進みません。止まるだけです。最初は完全に機能しますが、2回目は機能しません。ブロックを使用してその全体をコピーし、最初のブロックの直後に貼り付けてみましたが、同じことが起こります。ダイアログは1回だけ表示されます。

FolderBrowserDialogを複数回表示するにはどうすればよいですか?

解決:

'this'をShowDialogに渡すと、問題が修正されました。また、ダイアログを不必要に再作成しないように、usingをwhileループの外側に移動しました。

4

2 に答える 2

2

Visual Studioを最小化すると、ダイアログが表示されます。

これはフォーカスの問題であり、Loadイベントでダイアログを表示したために発生します。ダイアログを閉じると、フォーカスを受け取ることができるウィンドウがアプリに残っていません。Loadイベントの実行が終了していないため、アプリのメインウィンドウはまだ表示されていません。Windowsは、フォーカスを与えるウィンドウを見つける必要があり、別のプログラムから1つを選択します。VisualStudioのように。

ダイアログを再度表示すると、Visual Studioがダイアログを取得しているため、フォーカスを取り戻すことはできません。そのため、ダイアログはVisualStudioのメインウィンドウの後ろに表示されます。

メインウィンドウを表示できるようにして、これを修正する必要があります。そして、dialog.ShowDialog(this)を呼び出して完全に確認します。たとえば、Shownイベントを使用できます。

于 2010-06-18T21:33:32.293 に答える
1

これを試して:

using (FolderBrowserDialog dialog = new FolderBrowserDialog())
{
    while (ValidDirectorySelected() == false && tryAgain == true)
    {
        dialog.ShowNewFolderButton = false;

        if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.Cancel)
        {
            tryAgain = false;
        }
    }
}

...使用をwhileループの外に移動して、フォルダブラウザが毎回破壊されないようにします。あなたはそれをする必要はありません。FolderBrowserDialogを再利用できます。

于 2010-06-18T21:08:53.367 に答える