将ImageList与其密钥重新关联

时间:2012-06-08 16:47:24

标签: c# serialization icons client-server

我有一个客户端和一个服务器。服务器从其桌面检索应用程序列表(每个应用程序包含路径,名称和图标)。然后它将应用程序发送回客户端,显示在带有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对象中都有应用程序的路径,那么如何将它们按顺序与图像列表中的相应图标相关联呢?

1 个答案:

答案 0 :(得分:0)

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

因此,我只需要使用

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

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