Показать OpenFileDialog и получить свойство FileName из него в одну строку - PullRequest
0 голосов
/ 20 сентября 2018

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

Iзнаю, что можно вызывать несколько методов в одной строке, например string[] array = value.Trim().ToLower().Split('\\');, но когда я пытаюсь выполнить настройку такого типа с помощью OpenFileDialog, я получаю сообщение об ошибке, что методы не существуют.

Вот код, который яиметь прямо сейчас:

OpenFileDialog box = new OpenFileDialog(); box.ShowDialog(); pathTextBox.Text = d.FileName;

Мне было интересно, можно ли было бы (ради аккуратности) настроить его примерно как pathTextBox.Text = new OpenFileDialog().ShowDialog().FileName;

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Я вполне уверен, что ни один из модальных диалогов не работает таким образом.Пока вы можете сказать:var foo = new OpenFileDialog().ShowDialog();В результате получается DialogResult, а не искомое свойство имени файла.Кроме того, у вас больше не будет ссылки на фактический объект FileDialog, и вы все равно не сможете извлечь выбранное имя файла.Одна доступная вам альтернатива - создать метод, который будет выглядеть так, как если бы вы делали это одним вызовом:

public static string GetFilename()
{
    var dlg = new OpenFileDialog();
    var result = dlg.ShowDialog();
    var filename = dlg.FileName;

    return filename;
}

public static void Main()
{
    var userChosenFile = GetFilename();
    var aDifferentChosenFile = GetFilename();
    var yetAnotherChosenFile = GetFilename();
}
0 голосов
/ 20 сентября 2018

Краткий ответ: это называется цепочкой вызова метода.Он работает с Trim().ToLower().Split(), потому что Trim() и ToLower() возвращают string.Вы не можете цепным вызовом ShowDialog таким образом, потому что метод ShowDialog возвращает DialogResult, который является просто enum.

Однако теоретически вы могли бы извлечь это из отдельного метода расширения:

public static class OpenFileDialogExtensions
{
    public static string ShowDialogAndReturnFileName(this OpenFileDialog dialog)
    {
        // consider checking arguments
        dialog.ShowDialog(); 
        // consider checking the result of `ShowDialog` (e.g., user could close the dialog)
        return dialog.FileName;
    }
}

// Usage, just like you want:
pathTextBox.Text = new OpenFileDialog().ShowDialogAndReturnFileName();

Имейте в виду, что более короткий код не означает лучший код .
Возможно, лучший способ сделать это - это не делать.

...