Click here to Skip to main content
6,292,426 members and growing! (10,953 online)
Email Password   helpLost your password?
Desktop Development » Miscellaneous » Miscellaneous Controls     Intermediate

Resource Editor .NET

By Bill Sayles

A utility to easily refresh embedded graphic resources in a .NET assembly.
C#.NET 1.0, Win2K, WinXP, Dev
Posted:17 Nov 2002
Views:150,623
Bookmarked:80 times
Announcements
Loading...
 
Search    
Advanced Search
printPrint   Broken Article?Report       add Share
  Discuss Discuss   Recommend Article Email
20 votes for this article.
Popularity: 5.95 Rating: 4.57 out of 5
1 vote, 5.3%
1

2
1 vote, 5.3%
3
1 vote, 5.3%
4
16 votes, 84.2%
5

Sample Image - MainScreen.jpg

Introduction

I am sure Microsoft thought they were being progressive when they replaced the good ol' .rc file with the XML-based .resX file at the release of Visual Studio.NET. Unlike its predecessor, when you add a resource such as a bitmap to a .NET project through the properties of a Windows form, the actual bitmap binary data is embedded in the associated .resX file. This does not allow update or modification of the bitmap without removing and then adding the bitmap again to the form. Also, you can no longer easily add resources to the assembly not associated with an object managed by the designers. Microsoft includes a sample application which provides a rudimentary resource editor function with Visual Studio.NET, but it also only supports embedding the binary data and does not facilitate easy update of the resources.

The Resource Editor.NET utility is built off this sample application. It generates a .resources or .resX file which can be embedded in any .NET assembly project, and it also saves a .resourcesConfig file which saves the file locations for the resources you added. It currently supports bitmap, icon and string resources. It has saved countless hours during usability testing and language adaptation efforts.

Using the Tool

The Resource Editor .NET allows you to add bitmaps, icons and resource strings to use in your assemblies by making use of the classes in the System.Resources namespace. When you add a named resource, the full path information for the object is retained and saved to a .resourcesConfig XML file with the same name as the .resources or .resX file you specify when saving your work in the editor.  You can then add both files to your project in the Project Explorer. 

<?xml version="1.0"?>
<Resources Extension=".resources">
  <Resource Name="ButtonEnglishNormal" 
Type="System.Drawing.Bitmap" 
FileName="C:\CodeSubmissions\ResourceEditor.NET\images\bt-english.bmp" Value="" />
  <Resource Name="ButtonEnglishDisabled" 
Type="System.Drawing.Bitmap" 
FileName="C:\CodeSubmissions\ResourceEditor.NET\images\bt-english-na.bmp" Value="" />
  <Resource Name="ButtonEnglishPressed" 
Type="System.Drawing.Bitmap" 
FileName="C:\CodeSubmissions\ResourceEditor.NET\images\bt-english-on.bmp" Value="" />
  <Resource Name="ButtonEnglishOver" 
Type="System.Drawing.Bitmap" 
FileName="C:\CodeSubmissions\ResourceEditor.NET\images\bt-english-over.bmp" Value="" />
  <Resource Name="ButtonEspanolNormal" 
Type="System.Drawing.Bitmap" 
FileName="C:\CodeSubmissions\ResourceEditor.NET\images\bt-espanol.bmp" Value="" />
  <Resource Name="ButtonEspanolDisabled" 
Type="System.Drawing.Bitmap" 
FileName="C:\CodeSubmissions\ResourceEditor.NET\images\bt-espanol-na.bmp" Value="" />
  <Resource Name="ButtonEspanolPressed" 
Type="System.Drawing.Bitmap" 
FileName="C:\CodeSubmissions\ResourceEditor.NET\images\bt-espanol-on.bmp" Value="" />
  <Resource Name="ButtonEspanolOver" 
Type="System.Drawing.Bitmap" 
FileName="C:\CodeSubmissions\ResourceEditor.NET\images\bt-espanol-over.bmp" Value="" />
  <Resource Name="ButtonRoundGlassNormal" 
Type="System.Drawing.Bitmap" 
FileName="C:\CodeSubmissions\ResourceEditor.NET\images\bt-roundglass.bmp" Value="" />
  <Resource Name="ButtonRoundGlassDisabled" 
Type="System.Drawing.Bitmap" 
FileName="C:\CodeSubmissions\ResourceEditor.NET\images\bt-roundglass-na.bmp" Value="" />
  <Resource Name="ButtonRoundGlassPressed" 
Type="System.Drawing.Bitmap" 
FileName="C:\CodeSubmissions\ResourceEditor.NET\images\bt-roundglass-on.bmp" Value="" />
  <Resource Name="ButtonRoundGlassOver" 
Type="System.Drawing.Bitmap" 
FileName="C:\CodeSubmissions\ResourceEditor.NET\images\bt-roundglass-over.bmp" Value="" />
</Resources>

You can freely rename the resources or change the file specified. When you press Save, the XML file and the chosen .NET resource binary format file is generated. You can also just reopen the file to cause any changes to the referenced bitmap or icon files in the existing locations as specified in the .resourcesConfig have been modified and you want the changes included in the assembly during the next build. All you have to do is add the resulting .resources or .resX file to the project for the assembly you want to embed the resources in.

Using the Tool with Resources Added Through the Forms Designer

Although I don't use this tool for this purpose, you could use it for enabling refresh for bitmaps or icons associated to objects using the forms designer built into Visual Studio .NET.  This requires one extra step.

  1. First open the default .resX file created with the form designer to get the resource names into the editor. 
  2. Then go through each resource in the editor and re-associate the original file with the resource name assigned by the forms designer.
  3. Save the resulting file on top of the original .resX file.

Unfortunately, if you add or remove bitmaps or icons afterwards using the forms designer, you would need to repeat the process to incorporate those changes.  However, you can manipulate the .resourcesConfig XML file with a text editor to get around this.

Using with Visual Studio .NET

The Resource Editor .NET has two modes. The first is the standard UI mode, where you open the application to an empty resource set or with an existing .resourcesConfig file as its first parameter. The second adds the command-line switch /Refresh, which supresses the GUI but will regenerate the .resources or .resX file associated with the .resourcesConfig file. The easiest way to use the tool is to add it as an external tool to Visual Studio .NET. Then when you select the .resourcesConfig file in the Project Explorer, you can either refresh or edit the resources from within the Visual Studio environment. The following two snapshots show how to set the tool up in the IDE.

Adding the Tool for Resource Editing

Adding External Tool Resource Editor.NET for Resource Editing

Adding the Tool for Resource Refresh

Adding External Tool Resource Editor.NET for Resource REfresh

Additional Information

  • As I mentioned briefly before, you can edit the .resourcesConfig XML file directly in any text editor and then use the Resource Editor .NET to apply the changes. I make extensive use of this in global renames or duplication and rename or resources to speed up the process. In fact, I rarely open the GUI any more unless I am adding one or two resources.
  • You can use an graphic image file format supported by the .NET Framework System.Drawing.Bitmap class, you are not restricted to bitmaps.  However, I only tested JPEG and BMP.
  • The C# source code is provided, but is not necessary to make use of this tool. However, it does use a PropertyGrid control and shows one way to implement a custom property editor used to capture and save the file's file name. Or perhaps you will want to add some additional functionality on your own.
  • You can use a text editor to make minor modifications to the XML file and use it to easily manage culture-specific resources when creating localized applications, such as changing the subdirectory used from ..\en to ..\es to add an English and Spanish culture to the application.
  • Due to some quirk the internal resource file name used for the ResourceManager class turns out to be Filename.Resources.AssemblyName to pull resources out of the resource files you add to the assembly. 
  • Only string resources use the XML attribute Value in the Resource objects.

History

Initial Release.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Bill Sayles


Member
I have been developing C/C++ applications for Windows and UNIX platforms for 15 years, specializing in database and N-tier application architectures, including 7 years in hands-on project management (ugh!!). I also had a part in the OS/2 (what?) 2.1 development where I really got into multi-tasking, threads, synchronization and related technologies. Drank the Microsoft Kool-Aid long ago, though.
Occupation: Web Developer
Location: United States United States

Other popular Miscellaneous articles:

Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 25 of 29 (Total in Forum: 29) (Refresh)FirstPrevNext
GeneralRemove from ResX File PinmemberNeelam Sanjeev4:09 8 Aug '07  
GeneralUsage for file types? PinmemberYaron Shkop2:34 27 Feb '06  
Questionmodifying resource files on accident? Pinmember20XT67:49 22 Dec '05  
Generalbad image link in above page Pinmemberidearn3:15 6 Apr '05  
GeneralAdding Icons to VB.NET application PinmemberMstrControl20:24 15 Feb '05  
GeneralRe: Adding Icons to VB.NET application PinsussDrewManFu10:07 5 Mar '05  
GeneralInvalid file name for image PinmemberAntonio Barros4:04 4 Sep '04  
GeneralRe: Invalid file name for image Pinmembernicwilliams2:31 1 Feb '05  
GeneralEasy way to add binary resources Pinmemberrasw14:20 3 Sep '04  
GeneralGreat stuff... Pinmemberolivierv3:15 28 May '04  
GeneralAnother editor PinmemberGaston4:42 3 Mar '04  
General.NET Resourcer PinmemberAndre Seibel13:47 13 Sep '03  
GeneralRe: .NET Resourcer Pinmemberkrass4:37 18 Sep '03  
GeneralRe: .NET Resourcer PinmemberBill Sayles6:43 18 Sep '03  
GeneralRe: .NET Resourcer PinmemberMtnBiknGuy7:31 24 Nov '03  
Generalexcellent tool - icon not really supported? Pinmemberwurzelchen22:55 9 Sep '03  
GeneralGreat article! Pinmembermattiasnylen0:50 27 Aug '03  
GeneralSaving images? Pinmemberbalpo22:48 6 Jan '03  
GeneralRe: Saving images? PinmemberBill Sayles9:49 23 Jan '03  
GeneralRe: Saving images? Pinmemberraygilbert17:56 14 Jul '04  
GeneralRe: Saving images? Pinmemberrun149223:47 25 Oct '05  
GeneralRe: Saving images? Pinmembercplotts8:15 1 Nov '05  
GeneralThanks! PinmemberChad Busche5:57 5 Dec '02  
GeneralRe: Thanks! PinsussLJMorsillo4:52 27 Apr '04  
GeneralHow to add HTML files resource? PinmemberKS Yuen15:33 23 Nov '02  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 17 Nov 2002
Editor: Nick Parker
Copyright 2002 by Bill Sayles
Everything else Copyright © CodeProject, 1999-2009
Web17 | Advertise on the Code Project