我正在开发一个简单的应用程序,并且试图获取用户选择的exe的快捷方式。它可以正常工作,但是我想知道是否可以打开对话框并从一行中获取文件路径,这样我就不必将对话框存储在内存中。
我知道可以在一行上调用多个方法,例如string[] array = value.Trim().ToLower().Split('\\');
,但是当我尝试使用OpenFileDialog进行这种类型的设置时,会出现关于不存在的方法的错误。
这是我现在拥有的代码:
OpenFileDialog box = new OpenFileDialog();
box.ShowDialog();
pathTextBox.Text = d.FileName;
我想知道是否有可能(出于整洁的目的)将其设置为pathTextBox.Text = new OpenFileDialog().ShowDialog().FileName;
答案 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();
}