Могу ли я разрешить OpenFileDialog возвращать пустое имя файла?

#c# #return #filenames #openfiledialog #string

#c# #Возврат #имена файлов #openfiledialog #строка

Вопрос:

Я ищу способ заставить OpenFileDialog возвращать DialogResult.ОК в ShowDialog(), даже если пользователь оставил поле имени диалога пустым.

Я имею в виду, что если пользователь нажимает «Открыть», я хочу иметь возможность обрабатывать свойство FileName независимо от его значения.

Я знаю, что не могу наследовать от OpenFileDialog, итак, есть ли какой-то метод / свойство / событие, которое я не заметил?

Комментарии:

1. Есть ли причина, по которой вы хотели бы, чтобы пользователь мог оставить его пустым, а не просто отменить?

2. @LeonNewswanger: смотрите мой ответ Аббасу.

Ответ №1:

Насколько мне известно, пользователь не может нажать Open кнопку в диалоговом окне, когда файл не выбран или когда в текстовое поле для имени файла ничего не введено. Если вас не волнует, является поле пустым или нет, зачем вообще утруждать себя использованием DialogResult.OK ? Просто покажите диалоговое окно en, когда пользователь выберет, Cancel что FileName поле будет пустым.

 var ofd = new OpenFileDialog();
var result = ofd.ShowDialog();
var fileName = ofd.FileName;
  

Обновить:

Если вам действительно нужна разница между OK и Cancel , вы можете использовать следующий код:

 var ofd = new OpenFileDialog();
var result = ofd.ShowDialog();

if (result == DialogResult.OK)
{
    //Process FileName
}
else if(result == DialogResult.Cancel)
{
    //Process empty string
}
  

Обновить:

 if (MessageBox.Show("Select a file?", "", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
    var ofd = new OpenFileDialog();
    var result = ofd.ShowDialog();

    if (result == DialogResult.OK)
    {
        var fileName = ofd.FileName;
        //Do something with the filename
    }
    else if(result == DialogResult.Cancel)
    {
        //Process 'Cancel': create file or show errormessage or ...
    }
}
else
{
    //Create file
}
  

Комментарии:

1. Да, конечно, я мог бы это сделать, но я хочу, чтобы мой пользовательский интерфейс выглядел логично. Cancel здесь, в моем случае, действительно будет означать «отмена», а не «пустое имя файла».

2. Просто шучу, но: ofd.Title = "Select a file or click Cancel for an ampty filename.";

3. @Abbas людям действительно пришлось бы читать заголовки диалогов, чтобы это сработало =p

4. Жаль, что OpenFileDialog не имеет Description свойства, подобного FolderBrowserDialog имеющемуся у the. Это лучше видно, чем свойство Title.

5. Рассмотрите возможность инициализации OpenFileDialog вашим именем файла по умолчанию и, когда пользователь нажмет «ОК», проверьте, существует ли файл или нет.