Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 强制文件浏览器按名称对文件进行排序_C#_Wpf - Fatal编程技术网

C# 强制文件浏览器按名称对文件进行排序

C# 强制文件浏览器按名称对文件进行排序,c#,wpf,C#,Wpf,我有一个按钮,可以打开文件浏览器并选择多个文件,然后将它们添加到列表视图 private void btnInput_Click(object sender, RoutedEventArgs e) { // Open Select File Window Microsoft.Win32.OpenFileDialog selectFiles = new Microsoft.Win32.OpenFileDialog(); selectFiles.Multiselect =

我有一个按钮,可以打开文件浏览器并选择多个文件,然后将它们添加到
列表视图

private void btnInput_Click(object sender, RoutedEventArgs e)
{
    // Open Select File Window
    Microsoft.Win32.OpenFileDialog selectFiles = new Microsoft.Win32.OpenFileDialog();

    selectFiles.Multiselect = true;

    // Process Dialog Box
    Nullable<bool> result = selectFiles.ShowDialog();

    if (result == true)
    {
        // Add Path+Filename to List
        foreach (String file in selectFiles.FileNames)
        {
            lstFilesPaths.Add(file);
        }

        // Add List Filename to ListView
        lsvFiles.Items.Clear();
        foreach (String name in fileList)
        {
            lsvFileNames.Items.Add(Path.GetFileName(name));
        }
    }
}
在添加到
列表视图之前,如何强制浏览器对话框始终按名称对文件进行排序

有时windows默认为“修改日期”或“名称”之外的其他排序方法


注意:我在
列表中有完整的文件路径,在
列表视图中只有文件名

private void btnInput_Click(object sender, RoutedEventArgs e)
{
    // Open Select File Window
    Microsoft.Win32.OpenFileDialog selectFiles = new Microsoft.Win32.OpenFileDialog();

    selectFiles.Multiselect = true;

    // Process Dialog Box
    Nullable<bool> result = selectFiles.ShowDialog();

    if (result == true)
    {
        // Add Path+Filename to List
        foreach (String file in selectFiles.FileNames)
        {
            lstFilesPaths.Add(file);
        }

        // Add List Filename to ListView
        lsvFiles.Items.Clear();
        foreach (String name in fileList)
        {
            lsvFileNames.Items.Add(Path.GetFileName(name));
        }
    }
}
private void btnInput\u单击(对象发送者,路由目标)
{
//打开“选择文件”窗口
Microsoft.Win32.OpenFileDialog selectFiles=新建Microsoft.Win32.OpenFileDialog();
selectFiles.Multiselect=true;
//“进程”对话框
可为空的结果=selectFiles.ShowDialog();
如果(结果==真)
{
//将路径+文件名添加到列表中
foreach(selectFiles.filename中的字符串文件)
{
lstFilesPaths.Add(文件);
}
//将列表文件名添加到ListView
lsvFiles.Items.Clear();
foreach(文件列表中的字符串名称)
{
lsvFileNames.Items.Add(Path.GetFileName(name));
}
}
}
尝试更改为:

lstFilePaths.AddRange(selectFiles.FileNames.OrderBy(x => x))
lsvFileNames.Items.Clear();
lstFilePaths.ForEach(x => lsvFileNames.Items.Add(Path.GetFileName(x)));

filebrowser本身不会按文件名对结果进行排序,您需要在使用它们之前进行排序

如果
lstFilesPaths
是要保存所选文件路径以供其他地方使用的字符串列表,请尝试按文件名对列表排序添加:

foreach (var name in lstFilesPaths.Select(f => Path.GetFileName(f)).OrderBy(s => s))
{
    lsvFileNames.Items.Add(name);
}
或者,如果希望对文件路径列表和文件名列表视图进行排序,请尝试以下操作:

// Add Path+Filename to List
lstFilesPaths.AddRange(selectFiles.FileNames.OrderBy(f => Path.GetFileName(f)));

// Add List Filename to ListView
lsvFiles.Items.Clear();
foreach (var name in lstFilesPaths.Select(f => Path.GetFileName(f)))
{
    lsvFileNames.Items.Add(name);
}

如何将它们添加到列表框中?使用此信息更新您的问题可能会有所帮助。@Andresairr我已经更新了问题,我现在也在使用ListView而不是ListBox。似乎还有一些细节没有解释,因为您的代码示例不完整:什么是
lstFilePath
?假定
lsvFile
lsvlsvFileNames
都是列表视图,为什么有两个呢?什么是文件列表?把这些问题分类会让你的问题变得更好,从而更容易回答。有关提示,请参阅。这样做还有一个额外的好处,那就是让您以不同的方式思考代码,这通常会导致您自己想出一个解决方案。@Andresairr尽管我的问题不是要将它们添加到列表视图中,只是让文件浏览器在做任何其他事情之前按名称对它们进行排序。我有一个完整路径列表和一个仅用于文件名的列表视图。我将它们分开。这将对它们进行排序,但只有在它们被添加之后。在添加之前,我需要在文件浏览器中按名称对它们进行排序。因此,在OpenFileDialog上没有文档化的属性或API来设置排序顺序。如果无法在文件浏览器中对其进行强制排序,我可能不得不求助于此。我之所以需要首先在浏览器中对其进行排序,是为了让用户更容易避免在程序添加文件顺序时出错。如果在添加后对其进行排序,并且用户有意按特定顺序选择文件(按住ctrl键),那么它将覆盖他们的自定义排序,这是我试图避免的。值得一提的是,我已根据文件名对整个路径进行显式排序。尽管可能性不大,但我在此假设文件浏览器可以从不同路径返回多个文件,例如从“最近使用的文件”类型文件夹或搜索操作中选择的文件。您的意思是说您确实希望文件浏览器在用户选择文件之前按特定顺序显示这些文件吗?是,这就是我想做的。但另一位用户刚刚指出,这可能是不可能的。没错,您无法从此文件浏览器中获取。不过,如果你能胜任的话,你可以自己写。更多信息。