How to access System.Windows.Forms resources?

I would like to access the resources in System.Windows.Forms, specifically icons and assign them to misc buttons.

I know I could rip them and add them to the Resource file of the Project, however that would be a lot of work considering the number of icons I need to use.

Please provide small code sample in C#, thanks in advance!
reflector.png
LittleJohn101Asked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

abelCommented:
You can get a list of all resources in the Forms assembly by using the following code snippet. You can then use

Stream iconStream = a.GetManifestResourceStream(stringOfResource);

to get the stream of a resource.


// list all resources for the Window.Forms resource, 
// assuming System.Window.Forms is loaded and in focus
// (otherwise use a fully qualified name)
 
Assembly asm = Assembly.GetAssembly(typeof(Form));
string[] resources = asm.GetManifestResourceNames();
foreach (string s in resources)
    Debug.WriteLine(s);

Open in new window

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
LittleJohn101Author Commented:
This looks good, is there anyway to access these from the VS 2005 Form Designer?
0
iUsernameCommented:
Do you mean:
"global::<projectname>.Properties.Resources" ???
0
Starting with Angular 5

Learn the essential features and functions of the popular JavaScript framework for building mobile, desktop and web applications.

LittleJohn101Author Commented:
Exactly, I have tried

global::System.Windows.Forms.Resources
global::System.Windows.Forms.Properties

with no success...
0
abelCommented:
> This looks good, is there anyway to access these from the VS 2005 Form Designer?
You cannot access these elements directly from the form designer because the Visual Studio has never seemed it necessary to make it possible to browse the resources inside a DLL directly from the Form designer (i.e., when you select Image of a Picturebox). It is however possible to load the DLL directly in VS to browse the resources, but then you'd have to save them to another location.

Doing that in one time in a loop as I showed above (you can simply copy the Stream to disk) is then much easier.

If you want to access them by code, you can do so too, using just the same technique.

-- Abel --
0
abelCommented:
> global::System.Windows.Forms.Resources
That won't work, because that should mean that the Resources property should be implemented and made public. The Resources property the way you know it is added by Visual Studio as a convenience but does not have to be implemented.
0
LittleJohn101Author Commented:
Thanks for your abel!
0
abelCommented:
Just tried it as a little experiment, to be sure what I was telling was correct and the screenshot shows a few of the output bmp files that I have from the Forms.dll. Use the following code to "dump" all the ico, bmp and other resources from any dll:

Assembly asm = Assembly.GetAssembly(typeof(Form));
string[] resources = asm.GetManifestResourceNames();
foreach (string s in resources)
{
    using (Stream strIn = asm.GetManifestResourceStream(s))
    using(Stream strOut = File.Open(@"d:\temp\data\" + s, FileMode.OpenOrCreate))
    {
        BufferedStream outStream = new BufferedStream(strOut);
        BufferedStream inStream = new BufferedStream(strIn);
        byte[] buf = new byte[4096];
        int bytesRead = 0;
        while ((bytesRead = inStream.Read(buf, 0, 4096)) > 0)
            outStream.Write(buf, 0, bytesRead);
 
        outStream.Flush();
    }
}

Open in new window

ScreenShot409.png
0
LittleJohn101Author Commented:
Nice!
0
abelCommented:
You're welcome (just saw you already graded, but figured you'd like to know how to access / save the resource) ;-)
0
iUsernameCommented:
p.s.

it is not "global::System.Windows.Forms.Resources".
You shouldn't write "System" but your project's name....
As far as I know (and I'm using this code), it should work.

Anyway, glad it's working that other way too! :-) (and I learned something new...)
0
abelCommented:
> You shouldn't write "System" but your project's name....
> As far as I know (and I'm using this code), it should work.

You may want to check the OP's question again: (s)he doesn't want his/her self created resources, but the resources from another DLL, which is in this case the loaded DLL System.Windows.Forms.DLL. You cannot access that by using your own classname, because that would refer to your own class.
0
iUsernameCommented:
Right.
Sorry, and thanks!
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
.NET Programming

From novice to tech pro — start learning today.