#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 вашим именем файла по умолчанию и, когда пользователь нажмет «ОК», проверьте, существует ли файл или нет.