none
FileOpenDialogで複数ファイルを選択した際の順番 RRS feed

  • 質問

  • お世話になります。

    FileOpenDialogで複数ファイルを選択した際、クリックした順番に処理を行いたいのですが、選択した順番が入れ替わってしまい、
    困っております。

    例えば、 1.gif と 1.jpg と 1.pngというファイルをgif→jpg→png という順番でCTRL+左クリックで複数選択すると、
    なぜか
    png→gif→jpg という順番でファイル名には表示されてしまいます。

    何かいい方法があればご教授いただけると嬉しいです。
    2007年11月15日 3:01

すべての返信

  • OpenFileDialog クラスのことでしょうか?

     

    OpenFileDialogで選択した複数ファイルの処理って、ダイアログでユーザに選択してもらって、

    FileDialog.FileNames プロパティ

    http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.filedialog.filenames.aspx

    をstring[]を見て行うのだと思うのですが、

    ユーザがどういう順番で選択するのかわからないので、もともと選択した(クリックした)順番に依存するのはおかしいのではないでしょうか?

    string[]自体を任意の文字列(ファイル名)に応じた規則で並べ替えたいのなら、たとえばArray.Sort メソッド を使えます。

    2007年11月15日 4:11
  • 外池と申します。

     

    結論から申し上げて、良い方法は無い、と思います。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)に戻ろうにも、最初から選びなおしになっちゃいますね。

     

     

     

     

    2007年11月15日 4:54
  • 回答ありがとうございます。うーん、独自でコントロールを作成しないといけないですか。。。
    2008で搭載されていたらうれしいのですが・・・

    CodeProject,参考にしてみます。ありがとうございました。
    2007年11月15日 8:11
  • 外池です。

     

    別のスレッドに関連して少し調べてみたら、少なくともVB6の古いスタイルのコントロールは使えることが判明しました。(って、ご存知の方おおいかな? いずれにせよ、先の私の発言を一部撤回&補強です。)

     

    「Microsoft.VisualBasic.Compatibility」を参照した上で、ツールボックスのカスタマイズをしてやれば、DriveListや、DirList、FileListが使えるようです。

     

    参考になれば幸いです。

    2007年12月26日 9:00