我正在开发一个软件,该软件可以比较模因并帮助用户在计算机上组织模因。作为其一部分,我正在使用Windows.Forms
来构建UI。用户界面使用户可以添加要检查图像的文件夹,可以将其与一组已知的模因模板进行比较。
当我尝试向用户显示找到的图像时,就会出现我的问题。为此,我使用ListView
和属性LargeImageList
来包含图像的元组和图像文件的名称。
这是有问题的代码:
private void button1_Click(object sender, EventArgs e)
{
int i = 0;
var ic = new ImageCollection();
var fbd = new FolderBrowserDialog();
fbd.Description = "Select meme folder or image.";
if (fbd.ShowDialog() == DialogResult.OK)
{
string[] files = Directory.GetFiles(fbd.SelectedPath);
foreach (var file in files)
{
if (!ic.CheckIfImage(file)) continue;
imageList1.Images.Add(Image.FromFile(file));
}
foreach (var file in files)
{
listView1.Items.Add($"{Path.GetFileNameWithoutExtension(file)}", i++);
}
}
}
This是用户首次加载到文件夹时看到的示例。当用户尝试在另一个文件夹中加载时,this发生了。它显示第一个文件夹中的图像,以及第二个文件夹中的图像文件的名称。
有人知道此问题的解决方法吗?为了解决这个问题,我尝试了多种选择。从尝试清除包含图像的ImageList
到尝试控制ListView
更新的全部时间。这些都不起作用。我也尝试过搜索该问题,但没有找到解决办法的运气。
谢谢。
答案 0 :(得分:1)
如果您想一次显示单个文件夹的内容,请处理ImageList中的对象。
如果您想显示多个文件夹的内容,则需要指定所添加图像的新索引。而是使用相同的索引引用在ListView中添加新项:
CREATE PROCEDURE [dbo].[SP_User_Case_Answer_Found]
@userID BIGINT,
@visitID BIGINT
AS
return (SELECT count (*)
FROM User_Case_Answer
WHERE userID = @userID
AND pvisitID = @visitID)
索引器(int i = 0;
//(...)
listView1.Items.Add($"{Path.GetFileNameWithoutExtension(file)}", i++);
)始终从i
开始,因此ListView项将每次使用0
中的Image来使用Imagelist中的图像。新图像将永远不会显示。
您可以使用Index[0]
值(表示已添加到ImageList的图像数)作为基础,并从此值开始增加索引器:
ImageList.Images.Count
如果允许从ListView中删除图像,则还应该将其从ImageList中删除:这意味着您需要重新索引所有ListView项,这些项从删除的项之后的项开始。
记住要处置从ImageList中删除的Image。