3

私はリストビューにまったく慣れていません。リストビューに画像を表示しようとしています。新しいアイテムを追加すると、以前のすべてのアイテムが新しいアイテムに変わります。したがって、リストビューには同じ画像があります。グーグルで調べましたが、まだ解決策が見つかりません。私を助けてください。以下は私のコードです。

ImageList imageList = new ImageList();

        OpenFileDialog opend1 = new OpenFileDialog();

        opend1.Filter = "Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.*";

        opend1.Multiselect = true;

        if (opend1.ShowDialog() == DialogResult.OK)
        {

            listView1.View = View.LargeIcon;

            imageList.ImageSize = new Size(100, 100);

            for (int c = 0; c < opend1.FileNames.Length; c++)
            {

                Image i = Image.FromFile(opend1.FileNames[c].ToString());

                Image img = i.GetThumbnailImage(100, 100, null, new IntPtr());

                imageList.Images.Add(img);

            }

            listView1.LargeImageList = imageList;

            for (int j = 0; j < imageList.Images.Count; j++)
            {

                ListViewItem lstItem = new ListViewItem();

                lstItem.ImageIndex = j;

                listView1.Items.Add(lstItem);
            }

            listView1.Refresh();

        }
4

1 に答える 1

1

ListViewWinForms で使用する場合は、すべての画像をImageListに配置し、そのリスト内の画像のインデックスのみをListViewItems.

listView1.LargeImageList = imageList1;
listView1.SmallImageList = imageList2;
listView1.Items.Add("Foo", 0);
listView1.Items.Add("Bar", 1);

画像リスト ID デザイナーを作成して入力するのは非常に簡単です。また、手動で行うこともできます:

imageList1.Images.Add(fooImage); // will have index 0
imageList1.Images.Add(barImage); // will have index 1

UPDATEあなたのコードはうまく見えます。アプリケーションにある正確なコードですか?少しだけ単純化する必要があります。

listView1.View = View.LargeIcon;
imageList.ImageSize = new Size(100, 100);

foreach(var fileName in opend1.FileNames)
{
    Image img = Image.FromFile(fileName);
    imageList.Images.Add(img.GetThumbnailImage(100, 100, null, new IntPtr()));
}

listView1.LargeImageList = imageList;
for (int index = 0; index < imageList.Images.Count; index++)
     listView1.Items.Add(new ListViewItem() { ImageIndex = index });

listView1.Refresh();
于 2012-11-14T09:59:14.047 に答える