0

我有一个客户端和一个服务器。服务器从其桌面检索应用程序列表(每个都包含路径、名称和图标)。然后它将应用程序发送回客户端,以显示在带有 LargeIcons 的 ListView 中,以便客户端可以双击列表视图中的桌面图标并在服务器上打开该应用程序。(当完成以下错误时,这可以 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 对象中都有应用程序的路径,那么如何按顺序将它们与图像列表中的相应图标相关联?

4

1 回答 1

0

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

因此,我只需要使用

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

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

于 2012-06-08T17:00:02.020 回答