If you ever wanted to create a WinForms app for SharePoint that displays or interacts with lists, document libraries and files, then taking advantage of the
SPFile.IconUrl would help improve the user experience for your app.
Below is an app that displays all the webs, lists, document libraries and files in a selected site collection.
We can improve this a little bit by adding icons (taken from TEMPLATE\IMAGES folder on a SharePoint installation) for some of the nodes, as follows:
However, this is not good enough since we'll have all lists with the same icon, all doc libs with the same icon and so on… Here is the same app taking advantage of the list image URL and file icon URL.
For the list or document library, this is done by using the
SPList.ImageUrl attribute. Here is how the tree node was added:
TreeNode listNode = parentNode.Nodes.Add(list.Title);
listNode.SelectedImageIndex = listNode.ImageIndex =
For the file, this is done by using the
SPFile.IconUrl attribute. Here is how the tree node was added:
TreeNode fileNode = parentNode.Nodes.Add(file.Name);
fileNode.SelectedImageIndex = fileNode.ImageIndex =
GetImageFullPath method simply gets the full path of the image:
</span></span></span></span>private static string GetImageFullPath(string relativePath)
string imageName = Path.GetFileName(relativePath);
string fullPath = SPUtility.GetGenericSetupPath(@"TEMPLATE\IMAGES");
return Path.Combine(fullPath, imageName);
Given that now we have the full file system path to the image, all we have to do is create an image from the file path, then add it to the
ImageList of the
GetImage() method below does the job:
</span></span></span></span>private int GetImage(string url)
int imageIndex = spImageList.Images.IndexOfKey(url);
if (imageIndex == -1)
Image image = Image.FromFile(url);
imageIndex = spImageList.Images.Count - 1;
Here is how the final app looks like. Click on the image below to download the source and EXE.
Filed under: SharePoint