【问题标题】:openfiledialogue in c# is selecting multiple values but its selecting the last selecteditem as the firstc# 中的 openfiledialogue 正在选择多个值,但它选择最后一个选定项作为第一个
【发布时间】:2012-02-22 06:40:33
【问题描述】:

当我面临这个问题时,谁能指导我?

我有一个应用程序,我可以在其中通过浏览按钮带来项目,现在当用户选择多个文件时,虽然它会选择它们并添加它们(因为 multiselect = true)但它正在选择顶部的最后一个选定项目为什么?

因此导致流程出错。

【问题讨论】:

  • 值得一提的是,这种行为来自常见的“打开文件”对话框(Windows 的一部分),而不是来自 C# 的抽象。自 Windows 2000 以来,该对话框一直以这种方式运行,甚至可能更早。重新排序可能来自内部实现细节,Microsoft 可能不容易或不希望修复它。
  • 数组是不是倒序了??
  • @craig,不,但最后选择的项目总是在列表顶部重新排序。
  • 无论如何,顺序都是随机的,无论使用了您无法控制或查看的“排列方式”选择。您需要将选择视为一组,而不是列表。或者,如果有意义的话,对其进行排序。

标签: c# windows fileopendialog


【解决方案1】:

如果没有看到相关代码,问题可能会有所不同,但为了让您知道,有两种获取输出的方法:使用 FileNameFileNames

如果你启用MultiSelect但只查看FileName属性,你只会得到一个文件的名称,

此属性只能是一个选定文件的名称。如果你想 返回一个数组,其中包含所有选定文件的名称 多选对话框,使用FileNames

嗯,两种方式确实是一种简化,因为你也有SafeFileNameSafeFileNames。我将把研究留给读者做一个练习。

我可能根据 cmets 误解了您的问题,但让我们看看。

【讨论】:

  • 我不认为这是问题所在。
  • @svick 可能。 '顶部的项目' 让我不以为然。但是,如果没有有关订购要求的信息(如您所述),我不确定他们会寻求什么建议。如果认为 OP 无法以其他任何方式订购它们,我会担心(没有说明问题)。
  • @Mr. Disappointment ..当我需要框中的多个值时,我一直在使用 SafeFileNames,但我主要关心的是要让从 openfiledialgue 中选择它的顺序正确。那就是如果我选择 1,2,3,4,5(通过 multiselect )然后它应该反映 1,2,3,4,5 作为顺序,而不是 5,4,1,2,4。
  • 任何人都可以提出同样的建议......因为我一直在寻找和研究这个问题已经很长时间了,但一直无法找到正确的解决方案......
【解决方案2】:

您没有说明为什么顺序对您很重要,以及您是否真的需要它的顺序与用户选择文件的顺序相同。

但如果您不这样做,您可以简单地按名称对所选文件进行排序:这为您提供了有意义的可预测排序顺序。

【讨论】:

    【解决方案3】:

    对话框首先返回焦点文件名(带有虚线边框的文件名,即您最近单击的文件名)。因此,如果您单击一个文件名,然后按住 Shift 并单击列表中较低的一个文件名,最后一个文件名将成为焦点文件名,并在列表中排在第一位,然后依次为其他文件名。

    如果您以相反的方式进行操作 - 单击一个,然后按住 Shift 并单击列表中更高的一个 - 然后它们将按您期望的顺序列出。

    如果您不按住 Shift 并单击,而是在要选择的文件周围拖动一个矩形,则同样的事情。这不会改变焦点(它将停留在列表中的第一个文件名上),因此它们按照它们在列表中显示的顺序排列。

    如果用户开始使用键盘(Shift+Up/Down、Ctrl+Space、Ctrl+Up/Down),或者使用 Ctrl+click 选择不相交的范围,那么还有更多内容,但底线是,顺序是完全取决于用户,以及他们如何选择文件。

    但是你到底为什么要关心文件的列出顺序呢?你真的应该把它当作一个无序列表(因为真的没有好的方法让用户指定顺序——这不是对话的意图,所以它从来没有被设计成它易于订购您的选择)。如果您想按字母顺序或其他顺序显示文件名,那么只需对返回的列表进行排序即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      • 1970-01-01
      • 2012-05-14
      • 1970-01-01
      相关资源
      最近更新 更多