显示一个OpenFileDialog并从一行中获取FileName属性

时间:2018-09-20 15:48:45

标签: c# winforms openfiledialog

我正在开发一个简单的应用程序,并且试图获取用户选择的exe的快捷方式。它可以正常工作,但是我想知道是否可以打开对话框并从一行中获取文件路径,这样我就不必将对话框存储在内存中。

我知道可以在一行上调用多个方法,例如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 :(得分:2)

简短的回答:这称为方法调用链接。它与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();

请记住,短代码并不意味着更好的代码
也许,做到这一点的最好方法就是不要这样做。

答案 1 :(得分:0)

我非常有信心,所有的模式对话框都不会那样工作。当您可以说:

var foo = new OpenFileDialog().ShowDialog();

结果是DialogResult,而不是filename属性您正在寻找。此外,您将不再具有对实际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();
}