0

したがって、基本的に私が望むのは、ユーザーが参照ボタンを押すと、FolderBroswerDialog がポップアップすることです。ユーザーがフォルダを選択すると、そのフォルダ内のすべての画像がアイコン ビューで ViewList に取り込まれます。これどうやってするの?私が現在持っているコードは、フォルダーからすべてのファイルを選択して ListView に表示しますが、アイコンはありません。アイコンを取得するにはどうすればよいですか?
ここに私が現在持っているコードがあります...

private void button1_Click(object sender, EventArgs e)
{

    FolderBrowserDialog browsefolder = new FolderBrowserDialog();
    if (browsefolder.ShowDialog() == DialogResult.OK)
    {
        listView1.Items.Clear();

        string[] myfiles = Directory.GetFiles(folderPicker.SelectedPath);
        foreach (string file in myfiles)
        {
            string fileName = Path.GetFileNameWithoutExtension(file);
            ListViewItem myitem = new ListViewItem(fileName);
            myitem.Tag = file;
            listView1.Items.Add(myitem);
        }

    }
}
4

1 に答える 1

1

これは、正確で効率的な方法で行うのはそれほど簡単ではありません。手っ取り早い方法は、Icon.ExtractAssociatedIcon() を使用して、返されたアイコンをリスト ビューに関連付けられた ImageList に追加することです。ただし、エクスプローラーで表示されるものとまったく同じアイコンは表示されません。これには SHGetFileInfo() をピンボークする必要があり、自分で行うのは面倒ですが、コードは簡単にググることができます。

まったく異なる方法は、ListView を使用する代わりに、エクスプローラー ウィンドウを独自のフォームに埋め込むことです。まったく同じ外観が得られ、プログラムの応答性を維持しながらアイコンを検索するバックグラウンド スレッドが自動的に取得されるという主な利点があります。これはXPでは機能しないという欠点があります。必要なクラスは、Windows API Code Packの一部です。

于 2012-10-21T13:59:39.877 に答える