Using Icons at runtime from resource library!


Author
Message
Ben Hayat
Ben Hayat
StrataFrame User (412 reputation)StrataFrame User (412 reputation)StrataFrame User (412 reputation)StrataFrame User (412 reputation)StrataFrame User (412 reputation)StrataFrame User (412 reputation)StrataFrame User (412 reputation)StrataFrame User (412 reputation)StrataFrame User (412 reputation)
Group: Forum Members
Posts: 374, Visits: 1.2K
The following is a solution offered by Ben Chase (SF team) that allows you to use icons at runtime from a resource library rather than loading from disk:

the Image and Icon are completely different... mainly because Icon does not inherit from Image (the file formats are completely different since an Icon can have several different sizes within the file). So, I would recommend that you add the icons to your project (not as resources, just add them to the project with the "Add Exisiting Item" option) and change their compile option to Embedded Resource (in the properties for the file). Then, you can use the Icon constructor that accepts a stream to retrieve the embedded resources. Kinda like this:



notifyIcon1.Icon = new Icon(Assembly.GetExecutingAssembly().GetManifestResourceStream("RootNamespace.Folders.FileName"));



C# and VB do some different stuff for the name of the resource when it's compiled. C# uses the root namespace + the folder names separated by "." followed by the filename. Whereas VB just the root namespace + the filename. If you ever want to see what resources are available, you can use the Assembly.GetExecutingAssembly().GetManifestResourceNames(); method which will return the names of all of the resources. Oh, and the names are case-sensitive.



But that's probably your best be for retrieving icons from the assembly at runtime.


..ßen
Ben Hayat
Ben Hayat
StrataFrame User (412 reputation)StrataFrame User (412 reputation)StrataFrame User (412 reputation)StrataFrame User (412 reputation)StrataFrame User (412 reputation)StrataFrame User (412 reputation)StrataFrame User (412 reputation)StrataFrame User (412 reputation)StrataFrame User (412 reputation)
Group: Forum Members
Posts: 374, Visits: 1.2K
Paul Chase also offered another variation to this solution:

Here is how to accomplish what you originally asked in VB, For C# you would probably just have to change the casting.



NotifyIcon1.Icon = System.Drawing.Icon.FromHandle(CType(Me.ImageList1.Images(0), Drawing.Bitmap).GetHicon)




The following is my own done in C#. Broke it down for clarifications:



Bitmap myBitmap;

IntPtr Hicon;



myBitmap = imageList1.Images["Camera Check.Ico"] as Bitmap;

Hicon = myBitmap.GetHicon();

notifyIcon1.Icon= Icon.FromHandle(Hicon);



..ßen
GO

Merge Selected

Merge into selected topic...



Merge into merge target...



Merge into a specific topic ID...




Similar Topics

Reading This Topic

Login

Explore
Messages
Mentions
Search