Как я могу показать FolderBrowserDialog более одного раза? - PullRequest
0 голосов
/ 19 июня 2010

В моем событии Form_Load формы Windows я хочу показать 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;
  }
 }
}

Когда я вхожу в него, строка dialog.ShowDialog () достигается во второй раз, а затем ничего не происходит. Диалог не появляется, и отладчик не двигается дальше. Это просто останавливается. Работает отлично с первого раза, а не со второго. Я даже попытался просто скопировать весь блок используя и вставить его сразу после первого, и происходит то же самое. Диалог отображается только один раз.

Что мне нужно сделать, чтобы показать FolderBrowserDialog более одного раза?

Решение:

Передача 'this' в ShowDialog устранила мою проблему. Я также переместил использование за пределы цикла while, чтобы избежать ненужного повторного создания диалога.

Ответы [ 2 ]

2 голосов
/ 19 июня 2010

Сверните Visual Studio, откроется диалоговое окно.

Это проблема фокуса, вызванная тем, что вы отображаете диалог в событии Load. Когда диалоговое окно закрывается, в вашем приложении не остается окна, которое может получить фокус. Событие Load еще не завершено, поэтому главное окно приложения еще не видно. Windows должна найти окно для фокусировки и выберет одно из другого приложения. Как Visual Studio.

При повторном отображении диалогового окна невозможно вернуть фокус обратно, поскольку Visual Studio его приобрел. Таким образом, диалоговое окно появляется позади главного окна Visual Studio вне поля зрения.

Вам нужно будет исправить это, позволив вашему главному окну стать видимым. И вызовите dialog.ShowDialog (это), чтобы быть полностью уверенным. Вы можете использовать событие Shown, например.

1 голос
/ 19 июня 2010

Попробуйте:

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.

...