DOBON.NET DOBON.NETプログラミング掲示板過去ログ

listViewのサムネイルの更新

環境/言語:[VC++2008 windows7 ]
分類:[.NET]

現在,以下のような機能を実装したソフトをVC++2008のformアプリケーションで作成してますが,わからない点があるのでご質問させていただきます。

1.openFolderDialogで指定したフォルダの中にあるjpegファイルのパスを取得後,
imageListに登録し,listViewにサムネイル表示。
2.pictureBoxで動画を再生。
3.form上のボタンをクリックしたら,pictureBox->Image->Save("filename.jpeg",Imaging::ImageFormat::Jpeg);で再生中の動画の1フレームキャプチャし,jpeg形式で保存。
4.ボタンのクリックイベントハンドラ内で,1と同じ処理を行い,listBox内のサムネイルを更新。

上記の流れの処理を実行すると,3で作成したjpegファイルはlistBoxに追加されますが,サムネイル表示が,フォルダ内の一番古い更新日のファイルのものになってしまいます。

一度アプリケーションを終了し,再度アプリケーションを立ち上げてから1を実行すると,キャプチャした時点の画像が問題なくサムネイルに表示されます。

どのようにすれば,キャプチャした画像のサムネイルをすぐに反映出来ますでしょうか?

listBoxの更新のコードは以下のようになり,pictureBox->Image->Saveのすぐ後に実行しています。

//初期化
listView1->Items->Clear();

//保存先にあるjpegファイルの一覧を取得
array<String^>^jpegFile = System::IO::Directory::GetFiles(myFilePath,"*.jpeg");

//サムネイルのサイズの設定
imageList1->ImageSize = System::Drawing::Size(140, 115);

//listviewにimagelistを設定
listView1->LargeImageList = imageList1;

for(int i =0; i < jpegFile->Length; i++)
{

imageList1->Images->Add(Image::FromFile(jpegFile[i]));
listView1->Items->Add(jpegFile[i],i);

}
ImageList はクリアせずに、ListView をクリアして追加していますよね。
ImageList もクリアしてください。

たとえば、3 ファイルあって、1 ファイル増えて 4 ファイルになった場合は以下のような流れになりますね。

最初にこうなる: (ファイル名の後に [] は ImageList のインデックス)
ImageList 0:0.jpg, 1:1.jpg, 2:2.jpg
ListView 0.jpg[0], 1.jpg[1], 2.jpg[2]

1 ファイル追加して処理を実行するとこなる:
ImageList 0:0.jpg, 1:1.jpg, 2.jpg, 3:0.jpg, 4:1.jpg, 5:2.jpg, 6:3.jpg
ListView 0.jpg[0], 1.jpg[1], 2.jpg[2], 3.jpg[3]

3.jpg は ImageList の Index を 3 としますが、ImageList の 3 には 0.jpg が入るので合いません。
Azuleanさんご回答ありがとうございます。
imageListをクリアすることで,正常に機能するようになりました。
普通に考えたら,両方クリアするべきなのに完全に忘れていました。
ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板