2012-06-08 3 views
0

저는 클라이언트와 서버를 가지고 있습니다. 서버는 데스크탑에서 응용 프로그램 목록 (각각 경로, 이름 및 아이콘 포함)을 검색합니다. 그런 다음 응용 프로그램을 LargeIcons가있는 ListView에 표시되도록 클라이언트에 다시 보냅니다. 그러면 클라이언트가 listview의 바탕 화면 아이콘을 두 번 클릭하고 해당 응용 프로그램을 서버에서 열 수 있습니다. (http://support.microsoft.com/kb/814735)ImageList를 키로 다시 연결

내가 따르려고 역 직렬화 할 때 직렬화 된 아이콘이 저하 될 수있는 마이크로 소프트의 버그가 있습니다, 그러나

(아래 버그로 수행되는 경우에 ... 100 % 작동) 고품질의 아이콘을 다시 가져 오기 위해 거기에 주어진 조언.

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

을 그래서를 가지고 같이 내가 getDesktopIcons() 다음과 같이 내가 할에의 ImageList에 아이콘을 추가 할 때

//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); 
} 

: 여기

내가 뭘하는지입니다 응용 프로그램의 경로가 중요합니다. 그러나 이미지 스트림을 다시 클라이언트로 보내면 핵심 정보가 손실됩니다. 각각의 App 객체에 앱 경로가 있으므로 어떻게 그들을 imagelist의 해당 아이콘으로 순서대로 다시 연결할 수 있습니까?

답변

0

대답은 간단합니다. 내 List와 ImageList가 같은 순서로 구성되기 때문에, 내가 주어진 애플 리케이션을 반복 할 때 가정하는 것이 안전합니다. 그런 다음 Apps [0]은 ImageList [0]에 해당합니다.

따라서, I는 (응용 프로그램에 대응)를 설정하는 영상의 인덱스

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

를 사용하여 간단해야한다.