我在第一时间使用带有listview组件的imagelist,我想要的是列出图像。我面临的问题是我再次将图像添加到listview时无法避免重复的图像。请看下面的代码,让我知道我哪里出错了
OpenFileDialog addImages = new OpenFileDialog();
addImages.Filter = "JPEG (*.jpg)|*.jpg";
addImages.Multiselect = true;
if (addImages.ShowDialog(this) == DialogResult.OK)
{
foreach (string filename in addImages.FileNames)
{
try
{
if (this.imageList1.Images.ContainsKey(filename) == false)
{
this.imageList1.Images.Add(filename, Image.FromFile(filename));
}
}
catch{}
}
this.listView1.View = View.LargeIcon;
this.listView1.LargeImageList = this.imageList1;
for (int i = 0; i < this.imageList1.Images.Count; i++)
{
if (this.listView1.Items.ContainsKey(this.imageList1.Images.Keys[i]) == false)
{
ListViewItem li = new ListViewItem();
li.ImageIndex = i;
li.ImageKey = this.imageList1.Images.Keys[i];
li.Text = Path.GetFileName(this.imageList1.Images.Keys[i]);
this.listView1.Items.Add(li);
}
}
}
答案 0 :(得分:1)
您使用“ContainsKey”功能进行复制。
this.listView1.Items.ContainsKey()
MSDN说:“Name属性对应于ListView.ListViewItemCollection中ListViewItem的键。”
所以你需要设置ListViewItem的名称。
答案 1 :(得分:0)
我不完全理解你的问题,但你可以做一些事情。
在for循环之前在函数中添加this.listView1.Items.Clear()
。下次打开OpenFileDialog时,您将向空列表视图中添加项目。
在每个LiveViewItem标记中添加文件名。 li.Tag = ...filepath...
。然后,每次向listView添加新项目时,只需检查它是否已包含具有该标记的项目。