Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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# 是否可以使用带有multiselect的OpenFileDialog在末尾而不是在开头添加选定的文件?_C#_.net_Openfiledialog - Fatal编程技术网

C# 是否可以使用带有multiselect的OpenFileDialog在末尾而不是在开头添加选定的文件?

C# 是否可以使用带有multiselect的OpenFileDialog在末尾而不是在开头添加选定的文件?,c#,.net,openfiledialog,C#,.net,Openfiledialog,在启用multiselect的情况下使用OpenFileDialog时,每次我选择其他文件(使用ctrl或shift+单击)时,最新添加的文件都会插入到“文件名”文本框的开头。有没有办法改变这一点,让它们添加到末尾 我正在对界面进行一些定制工作,文件排序对我来说至关重要 我正在使用.NET4.5 编辑:在做了更多的实验之后,我不确定文件返回后的顺序。它似乎是按字母顺序排列的。有人能证实这一点吗?我很难找到好的文档/示例 如果希望按单击文件的确切顺序获取选定文件,则不能使用标准OpenFileDi

在启用multiselect的情况下使用OpenFileDialog时,每次我选择其他文件(使用ctrl或shift+单击)时,最新添加的文件都会插入到“文件名”文本框的开头。有没有办法改变这一点,让它们添加到末尾

我正在对界面进行一些定制工作,文件排序对我来说至关重要

我正在使用.NET4.5


编辑:在做了更多的实验之后,我不确定文件返回后的顺序。它似乎是按字母顺序排列的。有人能证实这一点吗?我很难找到好的文档/示例

如果希望按单击文件的确切顺序获取选定文件,则不能使用标准OpenFileDialog,因为无法控制返回文件名属性的顺序。 相反,您可以轻松地在特定文件夹中构建自己的文件列表视图,并自己跟踪单击的项目的顺序,从
列表中添加和删除这些项目

此时,可以使用onCheck事件处理程序从跟踪文件列表中添加和删除文件

void onCheck(object sender, ItemCheckEventArgs e)
{
    if (e.Index != -1)
    {
        string file = listView1.Items[e.Index].Text;
        if (filesSelected.Contains(file))
            filesSelected.Remove(file);
        else
            filesSelected.Add(file);
    }
}

那么反转文件名数组呢?我实际上是想在对话框仍然打开时(在用户选择OK之前)更改它们的显示顺序。在我的问题中,我可能没有说得足够清楚。不,这是清楚的,但什么是不清楚的(并触发了我的回答)是原因。我假设重要的是选择后执行的代码,而不是它们的显示方式。在任何情况下,我认为他们选择以这种方式添加它们,以便于在添加许多文件时查看最后一个文件,其中一些文件会从textbox.confirm滚动。返回的文件按字母降序排列。使用标准的OpenFileDialog似乎无法实现您的目标。若您不需要更改文件夹,那个么准备一个包含自定义文件选择的列表就相对容易了。您完全正确。我们正在对返回的文件进行非常具体的操作(它们最终成对使用,因此基本上需要1a、1b、2a、2b、3a、3b格式)。我不确定是否有可能用微软目前提供的东西来实现这一点。谢谢史蒂夫,我认为这是我能用OpenFileDialog所能做到的最好的了。
// Set the view to show details.
listView1.View = View.Details;

// Display check boxes.
listView1.CheckBoxes = true;
listView1.FullRowSelect = true;
listView1.MultiSelect = false;

// Set the handler for tracking the check on files and their order
listView1.ItemCheck += onCheck;

// Now extract the files, (path fixed here, but you could add a 
// FolderBrowserDialog to allow changing folders....
DirectoryInfo di = new DirectoryInfo(@"d:\temp");
FileInfo[] entries = di.GetFiles("*.*");

// Fill the listview with files and some of their properties
ListViewItem item = null;
foreach (FileInfo entry in entries)
{
    item = new ListViewItem(new string[] { entry.Name, entry.LastWriteTime.ToString(), entry.Length.ToString()} );
    listView1.Items.Add(item);
}            
listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);                        

// Create columns for the items and subitems.
// Width of -2 indicates auto-size.
listView1.Columns.Add("File name", -2, HorizontalAlignment.Left);
listView1.Columns.Add("Last Write Time2", -2, HorizontalAlignment.Left);
listView1.Columns.Add("Size", -2, HorizontalAlignment.Left);
void onCheck(object sender, ItemCheckEventArgs e)
{
    if (e.Index != -1)
    {
        string file = listView1.Items[e.Index].Text;
        if (filesSelected.Contains(file))
            filesSelected.Remove(file);
        else
            filesSelected.Add(file);
    }
}