当我面临这个问题时,谁能指导我?
我有一个应用程序,我可以在其中通过浏览按钮带来项目,现在当用户选择多个文件时,虽然它选择并添加它们(因为 multiselect = true)但它选择了顶部的最后一个选定项目,为什么?
因此导致流程错误。
当我面临这个问题时,谁能指导我?
我有一个应用程序,我可以在其中通过浏览按钮带来项目,现在当用户选择多个文件时,虽然它选择并添加它们(因为 multiselect = true)但它选择了顶部的最后一个选定项目,为什么?
因此导致流程错误。
You didn't say why the order matters for you and if you really need it in the same order as the user selected the files.
But if you don't, you could simply sort the selected files by their name: this gives you predictable sort order that makes sense.
如果没有看到相关代码,问题可能会有所不同,但为了让您知道,有两种获取输出的方法:使用FileName
或FileNames
.
如果您启用MultiSelect
但只查看FileName
属性,您将只获得一个文件的名称,
此属性只能是一个选定文件的名称。如果要在多选对话框中返回包含所有选定文件名称的数组,请使用
FileNames
.
好吧,两种方式确实是一种简化,因为你也有SafeFileName
和SafeFileNames
。我将把研究留给读者做一个练习。
我可能根据评论误解了您的问题,但让我们看看。
该对话框首先返回焦点文件名(带有虚线边框的文件名,即您最近单击的文件名)。因此,如果您单击一个文件名,然后按住 Shift 并单击列表中较低的一个,最后一个成为焦点文件,它在列表中是第一个,然后是其他文件名。
如果您以相反的方式执行此操作 - 单击一个,然后按住 Shift 并单击列表中较高的一个 - 然后它们将按您期望的顺序列出。
如果您不按住 Shift 并单击,而是在要选择的文件周围拖动一个矩形,则同样如此。这不会改变焦点(它将保留在列表中的第一个文件名上),因此它们按照它们在列表中显示的顺序排列。
如果用户开始使用键盘(Shift+Up/Down、Ctrl+Space、Ctrl+Up/Down),或者使用 Ctrl+click 选择不相交的范围,那么还有更多内容,但最重要的是,顺序都取决于用户,以及他们如何选择文件。
但是你到底为什么要关心文件的列出顺序呢?您实际上应该将其视为无序列表(因为用户确实没有指定顺序的好方法——这不是对话框的意图,因此它从来没有被设计为使您的选择更容易排序)。如果您想按字母顺序或其他某种顺序显示文件名,那么只需对您返回的列表进行排序。