【发布时间】:2012-03-11 19:33:57
【问题描述】:
我有一个 ListView,我用 ImageList 的内容填充它。当从列表中选择一个项目时,我检查该文件是否仍然存在。如果没有,我想将它从图像列表(私有静态)和 ListView 中删除。 出于某种奇怪的原因,我无法弄清楚,从列表中删除选定的图像后,图像立即消失,列表中的最后一个图像出现两次。 例如,如果列表包含以下图像:IMG1、IMG2、IMG3、IMG4、IMG5 并且我删除了 IMG2,新列表将如下所示:IMG1 , IMG4, IMG5, IMG5.
此外,如果我从列表中选择第二张图片(现在是 IMG4)并将其显示在某个图片控件 IMG3 中,该控件应该在该地点将显示在控件中。
有什么想法吗?
编辑: 填充列表视图:
private static ImageList stampsImages
if (stampsImages == null)
{
stampsImages = new ImageList();
stampsImages.ImageSize = new Size(125, 75);
}
DirectoryInfo di = new DirectoryInfo(Globals.Directory);
if (di.Exists)
{
FileInfo[] dFiles = di.GetFiles("*.png");
int stampListSize = stampsImages.Images.Count;
for (int i = 0; i < dFiles.Length; i++)
{
int idx = stampsImages.Images.IndexOfKey(dFiles[i].FullName);
if (idx < 0)
{
stampsImages.Images.Add(Bitmap.FromFile(dFiles[i].FullName));
stampsImages.Images[stampListSize].Tag = dFiles[i].FullName;
stampsImages.Images.SetKeyName(stampListSize, dFiles[i].FullName);
stampListSize++;
}
}
}
else di.Create();
for (int i = 0; i < stampsImages.Images.Count; i++)
{
ListViewItem stmp = new ListViewItem("", i);
lvwStamps.Items.Add(stmp);
}
lvwStamps.LargeImageList = stampsImages;
检查文件是否仍然存在:
private bool IsStampAvailable(int listIdx)
{
bool stampExists = true;
string stampFile = stampsImages.Images.Keys[listIdx];
if (!File.Exists(stampFile))
{
lvwStamps.Items.RemoveAt(listIdx);
stampsImages.Images.RemoveAt(listIdx);
stampExists = false;
}
return stampExists;
}
【问题讨论】:
-
一些代码可能比描述您认为正在发生的事情更有用。你只会描述你期望你的代码在做什么,而不是它实际上在做什么,如果它在做你期望的事情,你就不会在这里......
-
这听起来像是基于 0 与基于 1 的索引问题。
-
至少向我们展示删除代码。
-
这是一个 WinForms 项目。
标签: c# winforms image listview