Не фокусироваться на другой форме после FolderBrowserDialog.ShowDialog()
Я пытаюсь сделать выбор папки, которая показала бы ошибку, если на выбранном диске недостаточно места. Я создал специально разработанную ошибку и диалоговую форму, но есть проблема с использованием FolderBrowserDialog.
Вот мой фактический код:
frmDialog dialog = new frmDialog("Install software", "The software cannot be found. Please select the path of the executable or let the launcher install it for you.");
dialog.SetYesButtonText("Install software");
dialog.SetNoButtonText("Browse for executable...");
if (dialog.ShowDialog() == DialogResult.Yes)
{
fbd = new FolderBrowserDialog();
fbd.Description = "Please select where do you want to install the software!";
DialogResult result = fbd.ShowDialog();
if (result == DialogResult.OK) // + space checking, but I deleted it for debugging now.
{
frmError error = new frmError("Not enough space", "Please select a folder with at lease 22 MB of free space.");
error.ShowDialog();
}
}
После этого я сделаю цикл, который будет выполняться до тех пор, пока пользователь не выберет папку с достаточным пространством или не отменит выбор.
Проблема в том, что диалоговое окно с ошибкой не фокусируется. Поэтому, когда пользователь выбирает папку, FolderBrowserDialog исчезает, и в новом окне появляется диалоговое окно с сообщением об ошибке, но вместо диалогового окна с ошибкой окно Visual Studio получает фокус. Как я понял, эта проблема не существует с моими собственными формами, поэтому, если бы я изменил fdb на frmDialog, все три диалоговых окна появлялись бы с фокусом друг за другом.
1 ответ
Установите владельца диалоговых окон следующим образом:
fbd.ShowDialog( dialog );
error.ShowDialog( dialog );
Я рекомендую установить владельцев других диалогов, чтобы установить отношения родитель-потомок. Поэтому, когда вы закрываете родительскую форму, дочерние формы закрываются. А также положить using
блок вокруг ваших форм, если вы используете ShowDialog
звонки.