質問者
FileOpenDialogで複数ファイルを選択した際の順番

質問
すべての返信
-
OpenFileDialog クラスのことでしょうか?
OpenFileDialogで選択した複数ファイルの処理って、ダイアログでユーザに選択してもらって、
FileDialog.FileNames プロパティ
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.filedialog.filenames.aspx
をstring[]を見て行うのだと思うのですが、
ユーザがどういう順番で選択するのかわからないので、もともと選択した(クリックした)順番に依存するのはおかしいのではないでしょうか?
string[]自体を任意の文字列(ファイル名)に応じた規則で並べ替えたいのなら、たとえばArray.Sort メソッド を使えます。
-
外池と申します。
結論から申し上げて、良い方法は無い、と思います。OpenFileDialogを使う限り・・・。
Shou11さんが仰るように「複数のファイルを、順序も指定して、選択したい」という要求は、私も取り扱ったことがあるのですが、標準で提供されているFile操作関係のDialogだとどうしようもないですね。
古いVBであれば、ドライブを選択するコントロール、ドライブの下のフォルダーの階層構造を表示するコントロール、フォルダー内のファイルを列挙するコントロールと、それぞれ、バラバラに用意されていたので、自分なりに工夫して作ることができたのですが。
で、もし、不都合がなければ、なのですが、CodeProjectなどを探してみると、.Net用にこれらのコントロールを再現したものが見つかると思います。例えば、フォルダーの階層をTreeViewで表示するには、
http://www.codeproject.com/cs/miscctrl/foldertreeview.asp
はいかがでしょう? 同じようにファイルを一覧して選ぶコントロールもあるのではないかと。
ごく個人的には、Exploereの左側のペイン(名前空間の階層構造をツリー表示する部品)と、Explorerの右側のペイン(特定のフォルダーの中のファイルを列挙する部品)を、何故Microsoft社がコントロールとして用意してくれないのか、前から疑問なのですが・・・。強いニーズがあると思うんですけどね・・・。
あと、たぶん簡単で確実そうな方法として、1) とにかく、OpenFileDialogで複数ファイルを選んでおいて、2) 改めて選ばれたファイルを列挙して並べ替え操作をする画面を表示して、3) それから処理に移る、というのはいかがでしょう?
うーーん、ダメかな。1)→2)は楽に行けますが、2)でファイルが「足りない」ことに気づいて1)に戻ろうにも、最初から選びなおしになっちゃいますね。