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