将图像列表与其键重新关联

本文关键字:新关联 关联 图像 列表 | 更新日期: 2023-09-27 18:36:32

我有一个客户端和一个服务器。服务器从其桌面检索应用程序列表(每个应用程序都包含路径、名称和图标)。然后,它将应用程序发送回客户端,以显示在带有大图标的列表视图中,以便客户端可以双击列表视图中的桌面图标,并在服务器上打开该应用程序。(在处理以下错误时,这 100% 有效......

但是,存在一个Microsoft错误,其中序列化的图标在反序列化时将降级 (http://support.microsoft.com/kb/814735)

我正在尝试遵循那里给出的建议,以便带回高质量的图标。

这是我正在做的事情:

//Get the list of Applications, which will include an icon, which we'll ignore due to the bug.
List<App> apps = client.ServiceProxy.getDesktopShortcuts();
// Get the ImageListStreamer (The serializable portion of the ImageList) and assign it to our Image List
ImageListStreamer il = client.ServiceProxy.getDesktopIcons();
foreach (App app in apps){
    ListViewItem item = new ListViewItem(app.name);
    item.ImageKey = app.path;
    lv.Items.Add(item);
}

当我在getDesktopIcons()中将图标添加到ImageList时,我这样做如下:

il.Images.Add(app.path, app.icon);

以便让应用程序的路径成为关键。但是,我相信当我只将图像流发送回客户端时,它会丢失该关键信息。我在每个 App 对象中都有应用程序的路径,那么如何按顺序将它们与图像列表中的相应图标关联回来?

将图像列表与其键重新关联

答案很简单。由于我的 List 和 ImageList 都是以相同的顺序构建的,因此可以安全地假设当我遍历给定的应用程序时,Apps[0] 将对应于 ImageList[0]。

因此,我只需要使用

il.Images.SetKeyName(i, app.path);

与要设置的图像的索引(对应于应用程序)。